2017-02-17 83 views
1

我试图从fgets()读取输入,并且该函数不等待输出(来自键盘)。我们被告知使用fgets,因此scanf不是这里的选项。 fgets功能确实由于某种原因在main功能中使用,但在附加功能中不起作用。fgets不等待标准输入

下面的代码

char name[21]={0x0}; //tried everything; not assigning value and NULL&\0 

    printf("\nName: "); 

    //fseek(stdin,0,SEEK_END); 
    //rewind(stdin); 
    //fflush(stdin);  //these don't help 
    printf(stdin);  //for testing purposes, probably pointless 
    fgets(nimi, 21, stdin); 

程序将跳过fgets(),而不是等待输入,后来又增加了一些空字符串,我想名称的字符串。但是name没有得到NULL值,因为有一个错误检查。我知道有相当多的人有这个问题,但我没有找到任何帮助。大多数人告诉使用scanf或其他功能。记录scanf()将在这里按预期工作。语法应该是正确的,因为它在main()中工作。我可能甚至不知道stdin实际上是如何工作的,所以如果标题很傻,我很抱歉。

这个片段是直接指向一个malloc后(如果else子句)

+8

_for测试目的,可能毫无意义_....否,这是明显错误的.... – LPs

+2

您需要清除标准输入前使用fgets。 –

+5

您是否在此代码之前使用'scanf()'? (可能是一个问题),除了'printf(stdin);'是错误的。 – chux

回答

4

人指出,有东西在我的输入缓冲区,这是正确的。我的程序现在工作时,我包括

while ((int ch = getchar()) != '\n' && ch != EOF); 

在我的代码之前fgets()。事实上,在此之前有scanf函数。我永远感谢回答的人!对不起,如果我让自己看起来像一个白痴的代码。这是我的第一个C程序之一,所以代码可能“有点”关闭。再次感谢。