int main()
{
FILE *infile;
FILE *infile2;
char input[255],input2[255];
int status1, status2;
infile = fopen("test.txt", "r");
infile2 = fopen("test2.txt", "r");
if(infile == NULL)
{
printf("Can not open file 1!\n");
}
else if(infile2 == NULL)
{
printf("Can not open file 2!\n");
}
else
{
do
{
status1 = fscanf(infile, "%s", &input);
status2 = fscanf(infile2, "%s", &input2);
printf("File 1: %s\n File 2: %s\n", input, input2);
}while(status1 != -1 || status2 != -1);
}
fclose(infile);
fclose(infile2);
return 0;
}
我的输出如下:
我想在一行中逐字打印文件1。 file2也是如此。我对C有点新意,所以我被卡住了。
答案 0 :(得分:4)
如果您想阅读整行,请使用fgets
函数代替fscanf
:
char *status1, *status2;
.
.
.
do {
status1 = fgets(input, sizeof(input), infile);
status2 = fgets(input2, sizeof(input2), infile2);
printf("File 1: %s File 2: %s", input, input2);
} while (status1 || status2);
请注意printf
不再使用\n
的方式。这是因为fgets
将\n
保留在输入字符串中的文件中。
答案 1 :(得分:2)
我对代码进行了更改并且有效,但另一个问题。如果我想比较文件并将差异写入新文件,如下所示:
我的老师告诉我使用strcmp,然后把输出变成一个新文件,但我不太了解他..有没有人有一些我可以尝试的提示?
这是我的代码到目前为止的样子:
int main()
{
FILE *infile;
FILE *infile2;
FILE *outfile3;
char input[255],input2[255];
char status1, status2;
infile = fopen("test.txt", "r");
infile2 = fopen("test2.txt", "r");
if(infile == NULL)
{
printf("Can not open file 1!\n");
}
else if(infile2 == NULL)
{
printf("Can not open file 2!\n");
}
else
{
do
{
status1 = fgets(input, sizeof(input), infile);
status2 = fgets(input2, sizeof(input2), infile2);
if(status1 != 0){
printf("File 1: %s\n\nFile 2: %s\n\n", input, input2);
int result = strcmp(input, input2);
printf("\nResult = %d\n\n", result);
}
}
while(status1 || status2);
}
fclose(infile);
fclose(infile2);
return 0;
}
答案 2 :(得分:1)
当您使用fscanf
时,它只会读取字符,直到出现非空格字符。当您需要将输入作为整行时,您必须使用fgets()
。
来自man
的{{1}}页。
fgets()从流中读取最多一个小于大小的字符,并将它们存储到s指向的缓冲区中。读后停止了 EOF或换行符。如果读取换行符,则将其存储到缓冲区中。终止空字节('\ 0')存储在最后一个字符之后 在缓冲区。
所以你必须这样使用。
fgets()
检查条件时,
fgets(input,255,infile);
fgets(input2,255,infile2);
答案 3 :(得分:1)
在我的学校,我们创建了一个get_next_line函数,它接受一个文件描述符和一个指向参数中字符串的指针。
你可以看看这里:https://github.com/juschaef/libtowel/search?utf8=%E2%9C%93&q=get+next+line