scanf在while中,为什么要求输入带括号时不能继续循环?


while(scanf("(%d,%d)",&a,&b)==2){

...

}
此时scanf要求输入(a,b)形式,可是while并不能继续循环,只接收一次参数后就跳出了
经过尝试发觉是scanf的参数中要求输入"()"括号的问题,如果scanf("%d,%d",&a,&b)==2就没问题
这是为什么呢?

阅读 4.1k
2 个回答

在前面加空格的方式是不对的。
会导致你空行直接回车不能终止程序,得Ctrl-Z。
因为空格和回车这样的空白字符可以匹配任意多个,所以那个空格不光能吃掉之前的回车,还能不断匹配你的新回车,并等待下一个非空白字符(会和括号匹配)。
最好的办法是用fgets(stdin, 100, buf) 输入一整行。然后用sscanf去处理这一行。fgets会把回车读取进buf,不留在缓冲区里。
另一个办法是在循环里加一个getchar把回车吃掉(最好是个循环,一直吃到\n)

判断条件是 scanf("%d,%d")==2 scanf有返回值, 此外, 需要接收参数, scanf("%d,%d", &a, &b)==2 返回2时,循环条件成立.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题