我不知道为什么它只在我的文件中写一行
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];
。