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

时间:2015-11-22 23:22:29

标签: c printf do-while

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

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”。感谢大家的帮助

3 个答案:

答案 0 :(得分:1)

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

$ ./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”,这样当用户回答是肯定的时,它就会继续。

此外,命名输出文件句柄“输入”是向后的,正如其他人所提到的,您的answer变量应该是至少2个字符的字符数组,char answer[2];

答案 1 :(得分:1)

你正在做一些逻辑错误。你问是否退出。如果用户不想退出,则按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);
}

答案 2 :(得分:1)

  • 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, "%d\n", ID);
        printf("Exit? y/n ");
        if (scanf("%3s", answer) != 1) break;
        fflush(NULL);

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

    fclose(output);
}