2016-09-08 52 views
-1
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)有什么问题?程序在getc(stdin)后停止工作

+1

通过为每个打印的字符串附加一个'\ n'确保输出被刷新。没有足够的代码来辨别问题。 – chux

+0

请注意,'getc()'返回一个'int',通常有257个不同的值'EOF'和'unsigned char'范围内的值。 – chux

+0

尝试在每次调用printf()后使用'fflush(stdout);'来确定应该打印什么。 – MikeCAT

回答

0

您是否试过在空格后进入?除非你做了特定的安排,否则你的终端仿真或者你运行程序的任何地方都不会给你输入的每个键盘字符。它会一直等到你输入,然后让你完成所写的全部内容。

0

Stdin不会将输入字符刷新到输入流中,直到换行符“\ n”。所以getc(stdin)没有任何可读的内容,除非你按回车。如果您想在不敲回车的情况下阅读控制台输入,则可以在Windows编译器提供的conio.h库中使用getch()函数。 getch()从stdin中读取一个字符而不等待换行符。