c언어 질문 드립니다.

불필요한 소스는 지우고 필요한 부분만 간단하게 적어보았습니다.

현재 제 소스는  입력하면 그냥 입력된 순서대로 출력 되는 상황입니다.

하는 방법을 잘 몰라 질문 드립니다. 오류가 떠서 멘붕중입니다.ㅠㅠ

#include <stdio.h>
#include <string.h>
struct profile{
 int id;
 char *name[20];
};
int main(void)
{
 int n,i;
 struct profile a[10];
 
 printf("인원수 : ");
 scanf("%d",&n);

 for(i=0;i<n;i++)
 {
  scanf("%d%s",&a[i].id,a[i].name);
 }
 printf("\n");
 


 for(i=0;i<n;i++)
 {
  printf("%d %s\n",a[i].id,a[i].name);
 }
 return 0;
}

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

첫번째 문제는 일단 번호(아무거나)와 이름을 받고 출력을 하는데 이름의 가나다 순에 따라서 출력을 해야됩니다.

123 홍xx

456 김xx

789 박xx <-이렇게 입력 받으면

 

456 김xx

789 박xx

123 홍xx <-이렇게 출력 되야 되는데 temp를 어떻게 써야될지 잘모르겠습니다.ㅠㅠ 

==================================================================================================

#include <stdio.h>
struct profile{
 char *name[20];
 int grade;
};
int main(void)
{
 int n,i;
 struct profile a[100];

 printf("학생수 : ");
 scanf("%d",&n);

 for(i=0;i<n;i++)
 {
  printf("이름:");
  scanf("%s",&a[i].name);
  printf("점수:");
  scanf("%d",&a[i].grade);
 }
 for(i=0;i<n;i++)
 {
  printf("%s %d\n",a[i].name,a[i].grade);
 }

return 0;

}

두번째 문제는 이름 점수를 입력받으면 출력될때 석차를 같이 출력해야됩니다.

김xx 89

홍xx 78

박xx 93 <-이렇게 입력 받으면

김xx 89 2

홍xx 78 3

박xx 93 1 <-이렇게 출력되면 됩니다. 

 

이전 댓글 5
얼음사랑 2012-11-27 21:21
struct profile{ int id; char *name[20];};일단 이거 잘못 선언 하셨습니다.char name[20];이게 맞습니다.char *name[20];  이건 포인터 변수 name 을 20개 선언한 것입니다.
얼음사랑 2012-11-27 21:22
또한, struct profile a[10];이 선언에 의해 10명까지만 저장이 가능합니다.  입력불가능할 정도로 크게 잡으시던가, 아니면 명수 입력 받는 부분에서 10명 이하로 입력하게 처리 하셔야 오류가 나지 않습니다.
在野下手 2012-11-27 21:27
그리고 입력은3123 홍xx456 김xx789 박xx과 같아야할 듯 하고요...근데 temp 는 뭔가요? 안보이는데...
얼음사랑 2012-11-27 21:39
두문제 모두 입력과 출력 사이에 적당한 소팅 루틴이 들어가야 하는데요.  다음처럼 하시면 될듯 합니다.
메카니컬K 2012-11-27 22:17
답변 감사합니다. 오류가 뜨는 부분은 temp를 이용해서 스왑 하는 소스에서 오류가 발생하네요.. 이름따로 id 따로 스왑하지 않고 구조체 전체를 스왑 해야될꺼 같은데..
← 질문답변 목록으로