do while 工作慢了一步

问题描述

我在使用 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 中留下的任何换行符),它应该会按您的预期工作。