配列
#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行目と表示され実際には同じ行が含まれています。
このような場合どのように改善すればいいのか教えて下さい。
お礼
ありがとうございます。 うまくいきました。