我不知道为什么它只在我的文件中写一行
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”。感谢大家的帮助
答案 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);
}