【问题标题】:Program stops working after getc(stdin)程序在 getc(stdin) 后停止工作
【发布时间】:2016-09-08 01:56:27
【问题描述】:
printf("hello2");
int i = 0;
int done = 0;

while (!done)
{
    char c;
    printf("hello3");
    c = getc(stdin);
    printf("hello4");
    if (isspace(c))
    {
         done = 1;
         ungetc(c, stdin);
         printf("hello5");
    }
}

所以我的程序当前正在尝试读取输入(在这种情况下,具体来说是一个空输入)。但是,在我发现我的程序不起作用后,我尝试通过分散 printfs 对其进行调试,在我看来,在c = getc(stdin) 之后,程序停止工作?如果我的理论是正确的,那么使用c = getc(stdin) 有什么问题?

【问题讨论】:

  • 通过将\n 附加到每个打印的字符串来确保刷新输出。没有足够的代码来识别问题。
  • 注意getc()返回一个int,通常有257个不同的值EOFunsigned char范围内的值。
  • 在每次调用printf() 后尝试使用fflush(stdout); 以确保打印应该打印的内容。
  • 请发MCVE 并准确描述您输入的内容;你看到了什么输出,你期望什么输出

标签: c input


【解决方案1】:

您是否尝试在空格后按回车键?除非您进行特定安排,否则您的终端仿真或运行程序的任何地方都不会为您提供键入的每个键盘字符。它会等到您按 Enter 键,然后让您处理所写的整行。

【讨论】:

    【解决方案2】:

    在换行符 '\n' 之前,Stdin 不会将输入字符刷新到输入流中。因此 getc(stdin) 在您按 Enter 之前没有任何内容可读取。如果您想在不按回车的情况下读取控制台输入,可以使用 Windows 编译器提供的 conio.h 库中的 getch() 函数。 getch() 从标准输入读取一个字符而不等待换行符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-04
      • 2013-11-11
      • 1970-01-01
      • 2012-12-16
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 1970-01-01
      相关资源
      最近更新 更多