01/10/2018, 15:06

Code sắp xếp học sinh theo Alphabet luôn bị stopped working khi chạy

#include <stdio.h>
#include <conio.h>
#include <string.h>

struct Class
{
	char *hs;
};

void nhap(char *&a)
{
	char b[100];
	printf("Nhap ten: ");
	gets_s(b);
	a = _strdup(b);
}

void nhapClass(Class *&a, int n)
{
	for (int i = 0; i < n; i++)
	{
		nhap(a[i].hs);
	}
}


void xuatClass(Class *a, int n)
{
	for (int i = 0; i < n; i++)
		printf("%s
", a[i]);
}

char* Name(char *a)
{
	char *ch;
	ch = new char[10];
	int h = -1;
	for (int i = strlen(a) - 1; i >= 0; i--)
	{
		if (a[i - 1] == ' ')
		{
			for (int k = i; k < strlen(a); k++)
			{
				h++;
				ch[h] = a[i];
			}
			break;
		}
	}
	return ch;
}

void swap(char *a, char *b)
{
	char * temp = a;
	a = b;
	b = temp;
}

char* Ho(char* a)
{
	char *ch;
	ch = new char[10];
	int h = -1;
	for (int i = 0; i < strlen(a); i++)
	{
		++h;
		if (a[i + 1] == ' ')
			break;
		else
			ch[h] = a[i];
	}
	return ch;
}

void sort_Alphabet(Class *&a, int n)
{
	for (int i = 0; i < n - 1; i++)
	{
		for (int j = i + 1; i < n; j++)
		{
			if (strcmp(Name(a[i].hs), Name(a[j].hs)) > 0)
				swap(a[i].hs, a[j].hs);
			else if (strcmp(Name(a[i].hs), Name(a[j].hs)) == 0)
			{
				if (strcmp(Ho(a[i].hs), Ho(a[j].hs)) > 0)
					swap(a[i].hs, a[j].hs);
			}
		}
	}
}

int main()
{
	int n;
	printf("Nhap so hoc sinh: ");
	scanf_s("%d", &n);
	Class *a;
	a = new Class[n];
	getchar();
	nhapClass(a, n);
	sort_Alphabet(a, n);
	xuatClass(a, n);

	delete[]a;
	_getch();
	return 0;
}

Bài toán là hãy sx tên hs theo alphabet nếu trùng tên thì sx theo họ.
Mình code như thế này, không biết lỗi chỗ nào mà nó cứ stopped working hoài.
^^!!

rogp10 viết 17:16 ngày 01/10/2018

gets_s phải truyền thêm size nữa. Bạn nên xem MSDN nhé

Hello World viết 17:12 ngày 01/10/2018

mình dùng trước đó đâu có ta, chỉ v thôi là được rồi chứ ???

Bài liên quan
0