お蔵入り
C言語独学者です。
どこがどうおかしいのか詳しく教えてください。
ファイルのデータと配列のデータを比較して、一致するかどうかを確認するし、その結果を表示するプログラムを作成しています。しかし、ループの中の条件式がおかしい(と思います)ため、一致していても一致していないと出力されてしまいます。
何がどうおかしいのか、詳しく教えてください。
お願いします。
↓今、作成しているプログラムです。↓
#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("ファイルが見つかりません。\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);
}
↓test.txtの中身↓
001 akemi
002 kazuo
003 mika
005 yuri
006 xxx
よろしくお願いします。
2008-07-20 16:24の質問
この質問は、30日間解決しなかったために自動的に質問が一旦閉じられました。
Ads By Google
回答(3)
1.
2008-07-20 16:32:56
C言語では、文字列というのは、概念としてはあっても、データ型としては、ない(char の配列で、最後が'\0'だという決まりです。)ので、
== を使って等値を調べることはできません。
strcmp など、を使って調べる必要があります。
== を使って等値を調べることはできません。
strcmp など、を使って調べる必要があります。
回答レベル : アドバイス
2.
2008-07-20 18:20:45
#include <stdio.h>
#include <string.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[] = {
{"001","akemi","100","40"},
{"002","tadao","59","76"},
{"003","mika","94","69"},
{"004","hiroshi","54","98"},
{"005","kazu","39","57"},
};
struct test *test_p;
if ((fp = fopen("test.txt", "r")) == NULL) {
fprintf(stderr, "ファイルが見つかりません。\n");
return -1;
} else {
while (fscanf(fp, "%s %s", f_no, f_name) == 2) {
for(i = 0, test_p=data; i < 5; i++, test_p++) {
if((strcmp(test_p->no, f_no)==0) && (strcmp(test_p->name, f_name)==0)){
printf("%s %s 英語%s 数学%sです。\n", f_no, f_name, test_p->english, test_p->math);
break;
}
}
if(i==5){
printf("%s %s 一致しません\n", f_no, f_name);
}
}
}
fclose(fp);
return 0;
}
回答レベル : アドバイス
3.
2008-07-20 18:30:15
#include <stdio.h>
#include <string.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[] = {
{"001","akemi","100","40"},
{"002","tadao","59","76"},
{"003","mika","94","69"},
{"004","hiroshi","54","98"},
{"005","kazu","39","57"},
};
struct test *test_p;
int table_size = sizeof(data)/sizeof(struct test);
if ((fp = fopen("test.txt", "r")) == NULL) {
fprintf(stderr, "ファイルが見つかりません。\n");
return -1;
} else {
while (fscanf(fp, "%s %s", f_no, f_name) == 2) {
for(i = 0, test_p=data; i < table_size; i++, test_p++) {
if((strcmp(test_p->no, f_no)==0) && (strcmp(test_p->name, f_name)==0)){
printf("%s %s 英語%s 数学%sです。\n", f_no, f_name, test_p->english, test_p->math);
break;
}
}
if(i==table_size){
fprintf(stderr, "%s %s 一致しません\n", f_no, f_name);
}
}
}
fclose(fp);
return 0;
}
回答レベル : アドバイス
Ads By Google
コメント(5)
#2. BLUEPIXY
2008-07-20 18:00:11
#3. BLUEPIXY
2008-07-22 18:35:30
わかったのかわからないのかさっぱりわからない。
#4. 英明
2008-07-22 18:58:35
退会されたようです。
#5. BLUEPIXY
2008-07-22 19:55:57
サイテー!
#6. ★オニキス☆
2008-07-23 00:55:24
ドンマイ、がんばって、BLUEPIXYさん!
/* 全部charなのと、f_name[5]でアヤシイと思いましたよwたぶん、宿題でしょ。 */
