while循环中的fgets

时间:2016-01-14 13:51:08

标签: c fgets

我遇到了Selection的问题,因为它在fgets输入后第一次进入\n循环时返回while。 由于我已经在k循环内部并且已经编写了while,我该如何处理?

#1 try

4 个答案:

答案 0 :(得分:4)

在调用LgnArr3[s]之后,输入中有换行符,第一次调用scanf()会读取该换行符。 fgets()在遇到换行符fgets()时停止阅读输入。因此,它不会读取任何输入。

\n之后立即拨打getchar();来使用换行符。

如果输入中有多个字符,您也可以使用循环来消费。

scanf()

通常,最好避免将int c; while((c= getchar()) != '\n' && c != EOF); scanf()混合。您可以使用fgets()代替fgets(),并使用不太倾向的scanf()来解析该行。

答案 1 :(得分:1)

你应该清理stdin的缓冲区。您可以在循环之前使用fflush(stdin);执行此操作。但这是一种糟糕的风格。还要考虑fseek(stdin,0,SEEK_END);

答案 2 :(得分:1)

您只需在格式后添加空格即可使用\n

scanf("%c ", &r);

答案 3 :(得分:1)

  1.   

    我遇到了fgets的问题,因为它在第一次进入“k”输入后的while循环时返回\ n。

    这是因为当您输入scanf("%c", &r);时,k[ENTER_KEY]会将k字符存储在变量r中,并将\n(按下了ENTER键)保存在stdin流。

    因此对于fgets(inputline, 160, stdin);,它会在\n中找到stdin换行符,在inputline中找到它并从man -s3 fgets退出:

      

    fgets()从流中读取最多一个小于大小的字符,并将它们存储到s指向的缓冲区中。读数在EOF或换行符后停止。如果读取换行符,则将其存储到缓冲区中。

    1.   

      由于我已经在while循环内部并且已经编写了“#1 try”,我该如何处理?

      您可以使用\n

    2. stdin中使用getchar() {}