伙计们,我在文件中输入多个字符串时遇到问题,它排列不正确,这是我的代码:
char input[5];
int i;
FILE * data;
data = fopen("data.txt", "w");
for(i=0; i<3; i++){
data = fopen("data.txt", "a");
scanf("%s", input);
fprintf(data, "%s ", input);
}
fclose(data);
当我输入这样的输入时:a b c
文件中的输出是:c a b
无论发生什么,它总是会发生:1 2 3 变成 3 1 2, 3 6 9 变成 9 3 6
我不知道出了什么问题,请帮助我,并对我的语法错误表示歉意:)
最佳答案
原因是文件句柄数据
是 block 缓冲的。
在这一部分:
for(i=0; i<3; i++){
data = fopen("data.txt", "a");
scanf("%s", input);
fprintf(data, "%s ", input);
}
您打开三个文件句柄并向每个文件句柄写入一些字符串,比方说
1
2
3
现在在这里
fclose(data);
您首先关闭最后文件句柄,这会导致缓冲区数据刷新到文件。所以 3
排在第一位。
然后,在程序退出时,其他文件句柄将按照您打开它们的顺序隐式关闭,因此 1
和 2
会刷新到您的文件中。
这解释了您观察到的项目的奇怪顺序。 解决方案是仅打开文件一次,例如将循环修改为:
for(i=0; i<3; i++) {
scanf("%s", input);
fprintf(data, "%s ", input);
}
现在文件只打开一次。
关于C的文件多字符串排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44760665/