我现在想做的是有一个输入文本文件,将其内容加载到二维数组中,对其执行某些操作,然后将其放入另一个文件中。对我来说最重要的问题是保持原始文件的结构。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *ifp, *ofp;
char buffer[100];
int i, c;
ifp=fopen("test.in", "r");
ofp=fopen("test.out", "w");
while (!feof(ifp)){
if(fscanf(ifp, "%s", buffer) != 1)
break;
fprintf(ofp, "%s", buffer);
}
return 0;
}
我的输入:
aaa bb bbb
bbbbb bbbb aa
和输出:
aaabbbbbbbbbbbbbbaa
我为 EOL 或 EOF 识别所做的一切尝试都会导致无限循环。使用“%c”而不是“%s”执行任何操作都会导致更差的输出。提前致谢。 编辑:我知道我可以将输出设为单词之间有空格,或者将每个单词放在新行中,但我不知道如何从这里得到最终结果。
最佳答案
使用“%c”
#include <stdio.h>
int main(void)
{
FILE *ifp, *ofp;
char buffer;
ifp=fopen("test.in", "r");
if(ifp==NULL)return 1;
ofp=fopen("test.out", "w");
if(ofp==NULL){
fclose(ifp);
return 1;
}
for(;;){
if(fscanf(ifp, "%c", &buffer) != 1)
break;
fprintf(ofp, "%c", buffer);
}
fclose(ifp);
fclose(ofp);
return 0;
}
或getc()
。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *ifp, *ofp;
int buffer;
ifp=fopen("test.in", "r");
if(ifp==NULL)return 1;
ofp=fopen("test.out", "w");
if(ofp==NULL){
fclose(ifp);
return 1;
}
for(;;){
if((buffer = getc(ifp)) != EOF)
break;
putc(buffer, ofp);
}
fclose(ifp);
fclose(ofp);
return 0;
}
您不需要 feof()
因为用于读取的函数会检测 EOF。
另外,不要忘记检查文件是否已成功打开并关闭打开的文件。
关于使用c复制文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33940062/