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;
}
私の出力は次のようになります。
Word by Wordではなく、ファイル1を1行で印刷したいと思います。 file2についても同じことが言えます。私はCに少し慣れていないので、行き詰まっています。
行全体を読みたい場合は、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
を保持するためです。
コードに変更を加えて機能しましたが、別の質問があります。ファイルを比較して、次のような新しいファイルに違いを書き出したい場合:
私の先生は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;
}
私の学校では、get_next_line関数を作成します。この関数は、ファイル記述子とパラメーター内の文字列へのポインターを受け取ります。
ここを見ることができます: https://github.com/juschaef/libtowel/search?utf8=%E2%9C%93&q=get+next+line
fscanf
を使用している場合、空白以外の文字が出現するまで文字を読み取るだけです。入力を行全体として取得する必要がある場合は、fgets()
を使用する必要があります。
fgets()
のman
ページから。
fgets()は、ストリームから最大で1つ小さいサイズの文字を読み込み、sが指すバッファーにそれらを格納します。 EOFまたは改行の後に読み取りが停止します。改行が読み取られると、バッファーに格納されます。終了ヌルバイト( '\ 0')は、バッファーの最後の文字の後に格納されます。 。
したがって、このように使用する必要があります。
fgets(input,255,infile);
fgets(input2,255,infile2);
状態確認しながら、
while(input != NULL || input2 != NULL);