fgets()从stdin进入无限循环读取

时间:2014-01-07 13:46:19

标签: c stdin infinite-loop fgets

我编写了以下代码,但它陷入了无限循环。有人可以帮我解决这个话题吗?

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>

void main()
{
    FILE *fp;
    char s[10];


    fp=fopen("text1.txt", "w");

    if(fp==NULL)
    {
        printf("Error opening file\n");
        exit(1);
    }

    while(fgets(s, sizeof(s), stdin)!=NULL)//Reads until the NULL character.
        fputs(s, fp);//Write to the file pointed by fp..


    fclose(fp);
    getch();
}

2 个答案:

答案 0 :(得分:2)

如果输入输入,请使用 ctrl + z 来终止输入。我在linux上尝试了代码,它运行正常。 ctrl + z 表示Windows上的EOF。

如果您没有输入输入并使用重定向,则代码可以正常工作。

答案 1 :(得分:2)

此程序将按预期运行,直到输入信号“文件结束”。

如果您没有使用输入重定向(例如,将其作为myprogram < somefile.txt运行),而是使用控制台(键盘)作为输入设备运行,则必须手动发出文件结束信号以使循环结束。

在Linux中,按 Ctrl + D 完成,在Windows中 Ctrl + Z

相关问题