关于输入/输出的C语言程序运行不正常

关于输入/输出的C语言程序运行不正常,c,for-loop,io,C,For Loop,Io,我是编程新手。我的英语不好,所以我用谷歌翻译来问这个问题: 我正在练习用C语言输入/输出。我编写了一个C程序,它接受一个名为sample.txt的文件,并在其中写入几行字。我觉得我做的程序是正确的,但我在编译程序时发现了一个错误 #include <stdio.h> int main(){ FILE *fptr; int n,I; char text[100]; fptr=fopen("sample.txt","w&q

我是编程新手。我的英语不好,所以我用谷歌翻译来问这个问题:

我正在练习用C语言输入/输出。我编写了一个C程序,它接受一个名为sample.txt的文件,并在其中写入几行字。我觉得我做的程序是正确的,但我在编译程序时发现了一个错误

#include <stdio.h>

int main(){
    FILE *fptr;
    int n,I;
    char text[100];

    fptr=fopen("sample.txt","w");

    printf("Number of line? ");
    scanf("%d",&n);
    printf("\n");

    for( i = 1; i <= n; i++){
        printf("Line %d: ", I);
        fgets(text, sizeof(text), stdin);
        fputs(text, fptr);
    }
    fclose(fptr);

    return 0;
}
#包括
int main(){
文件*fptr;
int n,I;
字符文本[100];
fptr=fopen(“sample.txt”,“w”);
printf(“行数?”);
scanf(“%d”和“&n”);
printf(“\n”);

对于(i=1;i,正如人们在评论中已经指出的那样,您需要处理
scanf
留下的换行符,这样它就不会被
fgets()
消耗。您可以在scanf之后添加
getchar()
来处理此问题:

printf(“行数?”);
scanf(“%d”和“&n”);
getchar();
或者,您可以使用fgets()和sscanf替换使用scanf获取输入:

char输入[10];
...
fgets(输入,10,标准输入);
sscanf(输入、%d、&n);
当我进行这些更改时,我能够看到所需的输出:

c-posts : $ ./a.out 
Number of line? 3
Line 1: Foo
Line 2: Bar
Line 3: Pong
c-posts : $ cat sample.txt 
Foo
Bar
Pong

scanf
将换行保留在缓冲区中,而
fgets
将其作为第一行读取。欢迎这样做。请不要添加文本截图。而是直接复制并粘贴文本到问题中。您的主要问题可能是,为什么输出文件中只有4行。这也是由这也有助于: