• 締切済み

ライブラリ関数について教えてください

C言語を独学で勉強しています。 ファイルの中のデータと配列データが一致するかを調べるプログラムを作ろうとしています。 しかし、私が作っているプログラムでは表示結果が正しくありません。 char型では==を使って一致かどうかを調べることが出来ないので、ライブラリ関数を使う必要があることを知ったのですが、調べてもよくわかりませんでした・・・ どのように作ればいいのか詳しく教えていただけないでしょうか。 よろしくお願いします。 #include<stdio.h> struct test { char no[5]; char name[10]; char english[5]; char math[5]; }; int main(void){ FILE *fp; int i; char f_no[5], f_name[5]; struct test data[5] = { {"001","akemi","100","40"}, {"002","tadao","59","76"}, {"003","mika","94","69"}, {"004","hiroshi","54","98"}, {"005","kazu","39","57"} }; struct test *test_p; test_p = data; if ((fp = fopen("test.txt", "r")) == NULL) { printf("NOT OPEN FILE\n"); } else { while (fscanf(fp, "%s%s", f_no, f_name) == 2) { for(i = 0; i<=5; i++) { if((test_p->no == f_no) && (test_p->name == f_name)) { printf("%s %s 英語%s 数学%sです。\n", f_no, f_name, test_p->english, test_p->math); } else { printf("%s %s 一致しません\n", f_no, f_name); break; } ++test_p; } } } fclose(fp); }

みんなの回答

回答No.1

> char型では==を使って一致かどうかを調べることが出来ないので 違います。二つのcharが同じか否かは == で調べられます。 == で比較できないのは文字じゃなくて文字列(char*,char[])。 関数 strcmp に文字列を二つ渡し、結果が0なら同じ文字列です。 #include <string.h> int result; result = strcmp("abc","abc"); /* result = 0 */ result = strcmp("abc","AbX"); /* result != 0 */ なのでif文中の (test_p->no == f_no) 等を strcmp(test_p->no,f_no)==0 に置き換えることになります。

peneflear
質問者

お礼

勘違いしていました・・・ ありがとうございます。 もう一度作ってみます。

関連するQ&A