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

解決済みの質問

配列

#include "stdafx.h"
#include <ctype.h>
#include <string.h>

#include <stdlib.h>
typedef struct {
char number[6];
char class_type[20];
char name[8];
char subject[5];
} my;

my data[100];
int main(int argc, char* argv[])
{
FILE *fp;
int field = 0, line = 0;
char buf[1000], *str;
char bufG[1111];
int i;
if((fp=fopen("test3.csv","r"))==NULL){
printf("ファイルが開けません");
}

while(fgets(buf,1000,fp) !=NULL){
str=buf;

while(*str != '\0'){
if(*str != ','){
for(i = 0; *str != ',' && *str != '\0' ; i++){
if(*str == '\n'){
}
else{
bufG[i] = *str;
}
str++;
}
bufG[i] = '\0';
switch(field){
case 0:
strcpy(data[line].number, bufG);
break;
case 1:
strcpy(data[line].class_type, bufG);
break;
case 2:
strcpy(data[line].name, bufG);
break;
case 3:
strcpy(data[line].subject, bufG);
break;
}
field++;

}
else{
str++;
}

}
line++;
field = 0;



}
int p, q;
for(p = 0; p < line; p++){
for(q = 0; q < line; q++){
if(strcmp(data[p].class_type, data[q].class_type) == 0 &&
strcmp(data[p].subject, data[q].subject) == 0 && p != q ){
printf("p=%d q=%d\n", p, q);

}
}
}


fclose(fp);

return 0;

}

こちらのプログラムは
1,A,山根,音楽//番号、クラス、名前、好きな教科
2,B,本田,美術
3,B,松本,美術
4,A,横野,音楽

というファイルの内容を読み込んでクラスと好きな教科が同じものを
1,A,山根、音楽
4,A,横野、音楽
2,B,本田、美術
3,B,松本、美術のようにソートするプログラムの途中で
一致する行を表示しようとしている所です。
これをコンパイルした場合
一致しているのは
0行目と3行目
1行目と2行目
2行目と1行目
3行目と0行目と表示され実際には同じ行が含まれています。
このような場合どのように改善すればいいのか教えて下さい。

投稿日時 - 2009-06-29 15:20:18

QNo.5084141

すぐに回答ほしいです

質問者が選んだベストアンサー

for(p = 0; p < line; p++){
for(q = 0; q < line; q++){

for(p = 0; p < line; p++){
for(q = p+1; q < line; q++){
にすればいいのでは

投稿日時 - 2009-06-29 15:44:06

お礼

できました、ありがとうござましmた。

投稿日時 - 2009-06-29 15:58:10

ANo.1

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

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

回答(1)