/2つの文字列 str1[], str2[] が、大文字・小文字を区別しないで、一致しているかどうか判定する関数 stricomp を作成せよ。返却値は、一致していれば 1、不一致なら 0 とする。さらに、その関数を利用して2つのテキストファイルの内容が一致しているかどうか判定せよ。ファイル名はキーボードから入力できるようにする。/
という課題です。
上記の課題のコードを書いてみたのですがうまく行きません。どこがいけないのでしょうか。また、どのようにすれば成功しますか。
発生している問題・エラーメッセージ
エラーメッセージなどはなく、単純におかしな結果が表れます。
該当のソースコード
#include <stdio.h># #include <ctype.h> #include <stdlib.h> #define MAX 256 int stricomp(const char str1[], const char str2[]){ char copy1[MAX], copy2[MAX]; int i = 0; while(str1[i]){ copy1[i] = toupper(str1[i]); i++; } i = 0; while(str2[i]){ copy2[i] = toupper(str2[i]); i++; } i = 0; while(copy1[i] != 0 && copy2[i] != 0){ if(copy1[i] != copy2[i]) return 0; i++; } return 1; } int main(void){ FILE *fp1, *fp2; char str1[MAX], str2[MAX]; char fname1[MAX], fname2[MAX]; int check = 1; printf("開くファイル名1を入力してください : "); scanf("%s", fname1); printf("開くファイル名2を入力してください : "); scanf("%s", fname2); fp1 = fopen(fname1, "r"); fp2 = fopen(fname2, "r"); do{ if(fgets(str1, MAX, fp1)){ if(fgets(str2, MAX, fp2)){ check = stricomp(str1, str2); printf("%s",str1); printf("%s",str2); } else{ check = 0; break; } } else if(fgets(str2, MAX, fp2)){ check = 0; break; } else break; } while(check); fclose(fp1); fclose(fp2); if(check) printf("2つの文字列は一致しています。\n"); else printf("2つの文字列は一致していません。\n"); return 0; }
C言語
試したこと
関数内のcopy1,copy2で比較する部分をstr1,str2にして比較するとうまくいきました。
回答2件
あなたの回答
tips
プレビュー