scanf在while中,为什么要求输入带括号时不能继续循环?
如
while(scanf("(%d,%d)",&a,&b)==2){
...
}
此时scanf要求输入(a,b)形式,可是while并不能继续循环,只接收一次参数后就跳出了
经过尝试发觉是scanf的参数中要求输入"()"括号的问题,如果scanf("%d,%d",&a,&b)==2就没问题
这是为什么呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在前面加空格的方式是不对的。
会导致你空行直接回车不能终止程序,得Ctrl-Z。
因为空格和回车这样的空白字符可以匹配任意多个,所以那个空格不光能吃掉之前的回车,还能不断匹配你的新回车,并等待下一个非空白字符(会和括号匹配)。
最好的办法是用fgets(stdin, 100, buf) 输入一整行。然后用sscanf去处理这一行。fgets会把回车读取进buf,不留在缓冲区里。
另一个办法是在循环里加一个getchar把回车吃掉(最好是个循环,一直吃到\n)
判断条件是
scanf("%d,%d")==2
scanf
有返回值, 此外, 需要接收参数,scanf("%d,%d", &a, &b)==2
返回2
时,循环条件成立.