みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

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);

}

投稿日時 - 2008-07-20 18:19:48

QNo.4191217

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.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 に置き換えることになります。

投稿日時 - 2008-07-20 18:27:24

お礼

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

投稿日時 - 2008-07-20 18:29:16

あなたにオススメの質問