键入 Ctrl+Z 两次与仅键入一次

Typing Ctrl+Z twice vs just once

提问人:Leon 提问时间:4/20/2020 最后编辑:Leon 更新时间:4/20/2020 访问量:192

问:

顺便说一句,我正在使用 Windows 和 CodeBlocks IDE。

如果我的代码是(在说明符之前有空格):%d

    #include <stdio.h>

int main(void)
{
    int num;
    printf("Enter a number you want to check is present: ");

       while(scanf(" %d",&num)==EOF) // As long as wrong input is present on buffer
       {
          printf("Please enter valid input...\n");
          //clear the input buffer
       }
    return 0;
}

我必须输入两次(每行一次,不必在行的开头)才能运行案例。Ctrl+Zwhile(scanf(" %d",&num)==EOF)

而如果我的代码是: 如果我的代码是(说明符前没有空格):%d

    #include <stdio.h>

int main(void)
{
    int num;
    printf("Enter a number you want to check is present: ");

       while(scanf("%d",&num)==EOF) // As long as wrong input is present on buffer
       {
          printf("Please enter valid input...\n");
          //clear the input buffer
       }
    return 0;
}

我必须输入一次才能运行案例。Ctrl+Zwhile(scanf("%d",&num)==EOF)

所以这个问题有 2 个部分:

1)为什么第一个例子需要按两次?我试图参考 https://stackoverflow.com/a/21261742/10701114 但它是针对 UNIX 的,对我来说有点困惑Ctrl+Z

2)为什么说明符前面的空格甚至会导致这样的差异,因为除非它是 ,或者(我是从 https://stackoverflow.com/a/36504282/10701114 那里得到的)否则它无关紧要?%d%n%c%[...]

注意:如果我应该将这 2 个部分作为 2 个问题发布,请发表评论。

更新:我用 gcc 在 cmd 提示符上尝试过这个(我第一次在 cmd 提示符上),同样的问题仍然存在

c 扫描 eof

评论

1赞 Some programmer dude 4/20/2020
在 Windows 控制台(“DOS 提示符”)中,您必须按空行才能将其检测为 。Ctrl-ZEOF
0赞 Leon 4/20/2020
在 CodeBlocks 上,即使它是空行,我仍然需要按两次。(我按下换行符并按一次,直到我按另一个才起作用)。它只能在 Windows 控制台上正常工作吗?Ctrl-ZEnterCtrl-ZCtrl-Z
1赞 MemReflect 4/20/2020
IDE 中的控制台可能不遵循与 Windows 控制台相同的规则。您应该尝试在普通的 Windows 控制台中在 IDE 外部运行它,并在那里验证其行为。
1赞 chux - Reinstate Monica 4/20/2020
第二个“我必须输入一次 Ctrl+Z 才能运行案例”-->“我必须输入一次 Ctrl+Z 才能运行案例”吗?(无空格)while(scanf(" %d",&num)==EOF)while(scanf("%d",&num)==EOF)
1赞 Some programmer dude 4/20/2020
这可能是 Code:Blocks 本身及其处理输入的方式的缓冲问题。

答: 暂无答案