问题描述
我在使用 do-shile 循环时遇到问题,即使在调试之后我也不知道为什么会出现这种情况(我在 c 中有很多 exp,但我不知道为什么会在这里发生这种情况:() 这是代码:
int n;
n = 0;
do{
scanf("%d\n",&n);
printf("%d\n",n);
} while (n != -1);
printf("out!");
这是输出: enter image description here 如您所见,n 的回声是现在输入的后退一步。 同样在我看到的第一个输入的调试中,我们必须输入两个输入但没有调试(逐步设置)它只需要一个输入但输出是相同的
解决方法
问题是你有一个 scanf 格式的换行符。
scanf 格式中的空格(包括换行符)与输入中的空格不匹配。相反,它会导致 scanf 读取并丢弃空白字符,直到在输入中找到一个非空白字符,然后将其作为下一个要读取的字符。
因此,在您的情况下,第一个 scanf
调用在到达输入中的 2
之前不会返回。这将留给第二个 scanf 读取,但需要在第一个 scanf 完成之前输入(以及调用第一个 printf)。
删除该换行符(%d
格式会自动忽略前面的空格,包括可能从早期 scanfs 中留下的任何换行符),它应该会按您的预期工作。