关于输入/输出的 C 语言程序没有 运行 正确

C language programs about input / output do not run properly

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

我正在练习使用 C 语言 input/output。我编写了一个 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;
}

这是输出: enter image description here。 enter image description here

为什么 1 号线和 2 号线不像其他的那样分开?查了好几遍都不知道哪里出了问题

正如人们在评论中已经指出的那样,您需要处理 scanf 留下的换行符,以免之后被 fgets() 消耗。您可以在 scanf 之后添加一个 getchar() 来处理这个问题:

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

或者您可以将 scanf 的用法替换为 fgets(),然后是 sscanf:

char input[10];

...

fgets(input, 10, stdin);
sscanf(input, "%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