C언어.구조체소스수정해주세요.

C언어.구조체소스수정해주세요.

작성일 2004.07.27댓글 1건
    게시물 수정 , 삭제는 로그인 필요

먼가  이상한것 같으면서도 컴팔도 돼고  실행도 되는데요.   수정해주세요.

그리고  5번 입력받는데.   빨간문장이 6번나오는데  마지막 한번 안찍고 for루프 빠져나올려면  어떸케  해야 합니까?

 

 

#include <stdio.h>
  #include <stdlib.h>
  #define TSIZE    45
  #define FMAX      5
  struct film{
 char title[TSIZE];
 int rating;
  };

  int main(void)
  {
 struct film * ptr;
 struct film movies[FMAX];
 int i=0;
 int n;

 puts("자...영화제목 넣어보세요 ");
 while( i< FMAX && gets(movies[i].title)!=NULL && movies[i].title[0]!='\0')
 {
  puts("그 영화 순위를 입력하세요");
  scanf("%d", &n);
  ptr = (struct film *)malloc(n * sizeof(struct film));
  while(getchar()!= '\n')
   continue;
  i++;
  puts("계속해서 영화제목 입력하세용");
 }
 if(i==0)
  printf("입력된 값이 엄군요 \n");
 else
  printf("%10s %3d\n", ptr->title,  ptr->rating);
 printf("종료한다.!안녕~");
 return 0;
  }



profile_image 익명 작성일 -

위 소스는 수정의 수준이 아닙니다. 거의 새로 뜯어 고쳐야합니다.
컴파일이 되고 실행이 된다고 다된게 아닙니다.
프로그램에서 결과가 제대로 나오지 않으면 그건 무용지물입니다.

생판 모르시는 분한테 이런 말씀드리긴 죄송하지만.... 님은 기초가 없습니다.
기초가 없는 상태에서 이런 프로그램은 도움이 되지 않습니다.
이런 상태로는 하다가 자꾸 남에게 기댈수 밖에 없습니다. 지금 수준으로는
해결이 되지 않으니깐여... 그러면 백날해도 소용없습니다.

이런 프로그램보다는 기초부터 튼튼히 하세여. 그래야 그 다음이 있습니다.
우선 간단한 계산 프로그램을 많잖습니까?? 소수를 구한다든가 정열 등등..
그런것을 우선 짜지 말고 모방하세여. 단순모방을 얘기하는게 아닙니다.
되도록 간단한 소스를 보면서 알고리즘을 익히시란 말씀입니다.

이거 이후에는 구조체, 포인터를 각각..... 아주 간단한 예제로 접근하세여.
절대 위의 프로그램 같은거 말고요... 초보수준에 위의 프로그램은 쉽지
않습니다. 간단한 예제를 자주 보면서 포인터와 구조체의 원리를 우선적으로
이해해야합니다.

내용을 대충보니 과제물 같은데.... 이런거 잘하는 애들은 그냥 잘하는게
아닙니다. 처음부터 꾸준히 해오면서 많은 시행착오를 겪었기때문에
방법을 아는 것입니다. 에이... 이런건 너무 쉬워...... 글쎄여....
직접해보면 정말 황당한 곳에서 에러가 발생하는 경우가 허다합니다.
쉬운거라고 넘어가지 말고 직접 해보는것이 중요합니다.

저는 예전에 세미콜론을 못찾아서 30분을 헤매봤고 조건문에서 ==을 써야
하는데 =을 써서 에러 난것을 못찾아서 몇시간을 허비한 적이 있습니다.
이게 시간낭비라고 생각합니까?? 절대 아닙니다. 당시에는 허무했지만
이런것이 싸이고 싸여서 여러 버그에 쉽게 대응할수 있습니다.


기초부터 다시 하심이 어떠하실런지요??

위 프로그램 몇가지만 지적하자면....
movies와 ptr이 선언되어 있습니다.
그냥 쉽게 하려면 movies를 사용하시면 되고....
포인터를 동적할당을 하고 싶다면 ptr을 사용하세여.
동적할당으로 메모리를 아끼려고 쓰는게 포인터인데 배열까지 있으면 허무하죠.

scanf함수는 쓰지마세여.
그거 쓰면 여러가지 충돌이 생겨서 제대로 입력안될때가 많습니다.
scanf("%d", &n);
-->
char ch[10];

gets(ch);
n = atoi(ch);

이와 같은 방법을 사용하면 확실합니다. scanf는 여러가지 문제를 일으키는
함수로 C를 좀 안다면 쓰지 않습니다.

그리고 말씀하신 빨간색 글씨를 마지막에 출력안되도록 하는 방법은
그 위쪽에 조건문을 달아서 break를 쓰면 되지요.
그러나 결코 좋은 방법이 아닙니다. 다른 조건문도 많은데 그런 쓸데없는
조건까지 들어가면 헷갈리기 때문에 절대 권하고 싶지 않습니다.

puts("자...영화제목 넣어보세요 ");
puts("계속해서 영화제목 입력하세용");

---> printf("%d 번째 영화제목을 입력하세여!!!\n", i);

위 처럼 두개로 분리하는 것보다 한줄로 처리하여 조건문 상단에 넣으면
그게 훨씬 나을거 같습니다.


별로 이쪽에 관심이 없어서... 앞으로도 생각이 없다면 대충해도 되겠지만...
그게 아니라면 기초부터 튼튼히 하심이 조을꺼 같네여....

C언어.구조체소스수정해주세요.

... 수정해주세요. 그리고 5번 입력받는데. 빨간문장이... return 0; } 위 소스수정의 수준이 아닙니다. 거의... 이거 이후에는 구조체, 포인터를 각각..... 아주...

c 언어 구조체 소스 질문입니다

c 언어 소스 질문입니다 실력이 부족해서... printf("삭제할 값을 적어주세요:"); scanf("%d... h> // node라는 구조체를 typedef struct node { int...