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



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

void foo()
{
int ID;
char answer;
FILE *input = fopen("Dane.txt", "w");
do
{
    printf("Give ID: ");
    scanf("%d",&ID);
    fprintf(input, "%dn", ID);
    printf("Exit? y/n ");
    scanf("%s", &answer);
    fflush(NULL);
}
while (answer != 'n');
fclose(input);
}

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

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

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

程序的修改版本:

void foo()
{
    int ID;
    char answer;
    FILE *input = fopen("Dane.txt", "w");
    do
    {
        printf("Give ID: ");
        scanf("%d",&ID);
        fprintf(input, "%dn", ID);
        printf("Exit? y/n ");
        scanf(" %c", &answer);
        fflush(NULL);
    }
    while (answer == 'n');
    fclose(input);
}
  • answer只有一个可读取的空间,并且不能存储长度为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, "%dn", ID);
        printf("Exit? y/n ");
        if (scanf("%3s", answer) != 1) break;
        fflush(NULL);
    }
    while (answer[0] != 'y');
    fclose(output);
}

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

$ ./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

然而,你的问题是倒退的。您会问"退出?y/n",如果答案是"n"("否"),则退出。问题应该是"继续?y/n",这样当用户的回答是肯定的时,它就会继续。

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

最新更新