ページ 11

構造体とエクセルデータ

Posted: 2013年11月28日(木) 01:15
by まださまし
現在構造体を用いて生徒のデータをエクセルから読み取りそのデータを処理するプログラムを作っています。
プログラムの中で、名前をで入れ替える関数と数学の点数で入れ替える関数はうまくいくのですが英語の点数で入れ替えようとするとうまくいきません。
どこが間違っているのか指南ください。入れ替えはバブルソートの考えです。

コード:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

typedef struct{
	char namae[100];
	int mten;
	int eten;
}student;

void swap(student *x, student *y)
{

	student temp = *x;
	*x = *y;
	*y = temp;
}


void irekae1(student stu [], int cnt)
{
	int a = 0;
	int n;
	//for文でまわす



	int k = cnt - 1;
	//数が大きいかどうかを判別をする
	while (k >= 0){
		int i = 0, j = 0;


		for (i = 1, j = -1; i <= k; i++){
			if (strcmp(stu[i - 1].namae, stu[i].namae) == 1)
			{
				j = i - 1;
				swap(&stu[i], &stu[j]);

			}
		}
		k = j;
	}


}
//数学入れ替え
void irekae2(student stu [], int cnt)
{

	int a = 0;
	int n;
	//for文でまわす



	int k = cnt - 1;
	//数が大きいかどうかを判別をする
	while (k >= 0){
		int i = 0, j = 0;


		for (i = 1, j = -1; i <= k; i++){
			if (stu[i - 1].mten> stu[i].mten)
			{
				j = i - 1;
				swap(&stu[i], &stu[j]);

			}
		}
		k = j;
	}



}
//英語入れ替え 問題ありか?
void irekae3(student stu [], int cnt)
{

	int a = 0;
	int n;
	//for文でまわす



	int k = cnt - 1;
	//数が大きいかどうかを判別をする
	while (k >= 0){
		int i = 0, j = 0;


		for (i = 1, j = -1; i <= k; i++){
			if (stu[i - 1].eten > stu[i].eten)
			{
				j = i - 1;
				swap(&stu[i], &stu[j]);

			}
		}
		k = j;
	}



}



int main(void)
{
	int na;
	FILE *fp;
	int i = 0;
	int j = 0;
	char name[100];
	int p = 0;

	student stu[100];
	int cnt = 0;



	if ((fp = fopen("seiseki.csv", "r")) == NULL){
		printf("ファイルをオープンできません\n");
	}

	else{
		while (cnt < 100 && fscanf(fp, "%[^,],%d,%d", stu[cnt].namae, &stu[cnt].mten, &stu[cnt].eten) == 3){

			printf("%-10s %-10d %d", stu[cnt].namae, stu[cnt].mten, stu[cnt].eten);

			cnt++;
		}
	}


	fclose(fp);
	putchar('\n');




	printf("\n実行するものを選んでください\n");
	printf("1.名前で入れ替え\n2.数学点数で入れ替え\n3.英語点数で並び替え\n4.名前で検索\n5.基本統計量\n6.終了\n");

	scanf_s("%d", &na);


	if (na == 1)
	{
		irekae1(stu, cnt);
		for (p = 0; p <= cnt - 1; p++){
			printf("%-10s %-10d %d", stu[p].namae, stu[p].mten, stu[p].eten);
		}

	}
	else if (na = 2)
	{
		irekae2(stu, cnt);
		for (p = 0; p <= cnt - 1; p++){
			printf("%-10s %-10d %d", stu[p].namae, stu[p].mten, stu[p].eten);
		}

	}
	else if (na = 3)
	{
		irekae3(stu, cnt);
		for (p = 0; p <= cnt - 1; p++){
			printf("%-10s %-10d %d", stu[p].namae, stu[p].mten, stu[p].eten);
		}

	}
	else if (na = 4)
	{
	}
	else if (na = 5)
	{
	}
	else if (na = 6)
	{
	}
	else
	{
	}





	getchar();
	getchar();
	return(0);
}

Re: 構造体とエクセルデータ

Posted: 2013年11月28日(木) 01:30
by まださまし
if文のミスでしたすみません