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

发布于 2022-09-06 02:25:14 字数 224 浏览 18 评论 0


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

...

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

清欢 2022-09-13 02:25:14

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

メ斷腸人バ 2022-09-13 02:25:14

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文