do while 循环中的 fprintf 在文件 C 中只写了一行

fprintf in do while loop wrote only one line in file C

我不知道为什么它在我的文件中只写了一行

void foo()
{
int ID;
char answer;
FILE *input = fopen("Dane.txt", "w");

do
{
    printf("Give ID: ");
    scanf("%d",&ID);
    fprintf(input, "%d\n", ID);
    printf("Exit? y/n ");
    scanf("%s", &answer);
    fflush(NULL);

}
while (answer != 'n');

fclose(input);
}

输出(在文件中)只是我在控制台上写的第一个 ID 号。但是其他人呢?

编辑:好的,我知道了。错误在 char answer 中,应该是 char answer[2],结束时应该是 while(answer[0] != ...)。在它之前,程序只读取一个字符——行尾。当我打例如"n ENTER" 只需 ENTER。现在它从选项卡中获取第一个字符,即 "n"。谢谢大家的帮助

当我 运行 你的函数时,我得到了我在文件中输入的所有三个数字:

$ ./a.out
Give ID: 25
Exit? y/n y
Give ID: 33
Exit? y/n y
Give ID: 10
Exit? y/n n
$ cat Dane.txt
25
33
10

但是,你的问题倒退了。你问 "Exit? y/n" 然后如果答案是 "n" ("no") 就退出。问题应该是 "Continue? y/n",这样当用户回答肯定时,它会继续。

此外,将输出文件句柄命名为 "input" 是倒退的,正如其他人提到的,您的 answer 变量应该是至少包含 2 个字符的字符数组,如 char answer[2];

你犯了一些逻辑错误。你在问是否退出。如果用户不想退出,那么他会按n。所以,要继续循环,答案应该等于 n,对吗?

您程序的修改版本:

void foo()
{
    int ID;
    char answer;
    FILE *input = fopen("Dane.txt", "w");

    do
    {
        printf("Give ID: ");
        scanf("%d",&ID);
        fprintf(input, "%d\n", ID);
        printf("Exit? y/n ");
        scanf(" %c", &answer);
        fflush(NULL);

    }
    while (answer == 'n');

    fclose(input);
}
  • answer 只有一个 space 可以读取,它无法存储长度为 1 个字符或更长的字符串。
  • 这不会影响结果,但是使用 input 作为输出文件指针会造成混淆。
  • while中的条件不自然。

试试这个:

#include <stdio.h>

void foo();
int main() {foo(); return 0;}

void foo()
{
    int ID;
    char answer[4];
    FILE *output = fopen("Dane.txt", "w");
    if (output == NULL) return;

    do
    {
        printf("Give ID: ");
        if (scanf("%d",&ID) != 1) break;
        fprintf(output, "%d\n", ID);
        printf("Exit? y/n ");
        if (scanf("%3s", answer) != 1) break;
        fflush(NULL);

    }
    while (answer[0] != 'y');

    fclose(output);
}