我现在要做的是有一个输入文本文件,将其内容加载到二维数组中,对其执行某些操作然后将其放入另一个文件中。对我来说,基本问题是保留原始文件的结构。这是我的代码:
#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”执行任何操作会导致输出更差。提前致谢。 编辑:我知道我可以将输出变为带有空格的单词,或者将每个单词放在一个新行中,但我不知道如何从这里获得最终结果。
答案 0 :(得分:0)
使用"%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。
另外,不要忘记检查文件是否成功打开并关闭打开的文件。
答案 1 :(得分:0)
使用 getline 功能代替 fscanf 。因为 fscanf 无法读取包含空格字符的完整字符串
change: function () {
$('#setpolicyform').bootstrapValidator('revalidateField', 'policyta');
}
查看 getline 的完整详情: http://man7.org/linux/man-pages/man3/getline.3.html