do while works 慢一步

do while works one step slower

我有一个 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 调用不会 return 直到它到达输入中的 2。这将留给第二个 scanf 读取,但需要在第一个 scanf 完成(和第一个 printf 调用)之前输入。

删除该换行符(%d 格式自动忽略前面的空格,包括早期 scanfs 可能留下的任何换行符),它应该可以按预期工作。