知識、知恵のカタマリ

[PR]コレがGoogleの検索ストーリー

お蔵入り

clip!clip!
Ads By Google

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の質問
質問  C言語  
この質問は、30日間解決しなかったために自動的に質問が一旦閉じられました。

回答(3)

1.

2008-07-20 16:32:56
C言語では、文字列というのは、概念としてはあっても、データ型としては、ない(char の配列で、最後が'\0'だという決まりです。)ので、
== を使って等値を調べることはできません。
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

わかったのかわからないのかさっぱりわからない。

2008-07-22 18:58:35

退会されたようです。

#5.  BLUEPIXY
2008-07-22 19:55:57

サイテー!

2008-07-23 00:55:24

ドンマイ、がんばって、BLUEPIXYさん!
/* 全部charなのと、f_name[5]でアヤシイと思いましたよwたぶん、宿題でしょ。 */

トラックバック(2)

トラックバックURL: