여러분들은 반복되는 숫자 입력을 어떻게 받아들이나요?
글쓴이: junteken / 작성시간: 수, 2004/12/22 - 2:36오전
먼저 이프로그램의 설명부터 하자면 학생의 시험성적을
입력받아서 그것을 내림차순으로 정렬하는 간단한 프로그램입니다.
간단한 문제로 약간 고민하고 있는데요...
다름이 아니라 밑에 보시면 처음에 들어오는 입력이
i 일때 입력을 받아들이고 q일때 프로그램이 종료되도록까지
프로그래밍 했습니다. 그런데 쪼금 짜증나는 부분이
처음에 이부분을 scanf를 통해서 문자하나를 입력받도록
하였습니다. 이런식으로 하니깐 뒤에 getline에까지 영향이
미치더라구요...scanf에서 읽어들인 \n 요놈때문에
getline도 입력이 되어버린것처럼 실행이 되어버렸습니다.
그래서 다음과 같이 수정하고 다시 프로그램을 돌려보니
이제는입력을 모두 마치고 마지막에 엔터를 친것이
다음입력의 문자부분에 걸려서 이상하게 꼬이네요..
저번에도 scanf때문에 무지 고생했었는데....
헉....이런경우는 보통 어떻게 해결하나요?
답변 부탁드립니다.
struct _Student{ char *name; int kor_score; int eng_score; int math_score; double avrg; }; void Bubble(struct _Student*, int); int main(int argc, char **argv) { int i=0, cond_var=1; size_t t; int size=0; char in, trim; struct _Student data[BUFFSIZE]; //input from user in order name, kor_score, eng_score, math_score while(cond_var){ printf("For input - push 'i', For quit - push 'q'\n"); while( (trim= (char)getchar()) != '\n') in=trim; switch(in){ case 'i': printf("Input name, korean score, english score, math score\n"); printf("name : "); data[i].name= NULL; getline(&data[i].name, &t, stdin); printf("Korean score : "); scanf("%d",&data[i].kor_score); printf("English score : "); scanf("%d", &data[i].eng_score); printf("Math score : "); scanf("%d", &data[i].math_score); data[i].avrg= (double)(data[i].kor_score+ data[i].eng_score+ data[i].math_score)/3.0; size++; break; case 'q': cond_var=0; break; default: printf("You inputed wrong \n"); break; } } printf("\nFor debugging\n"); for(i=0; i< size; i++){ printf("name= %s, kor_score= %d, eng_score= %d, math_score= %d, avrg= %f\n", data[i].name, data[i].kor_score, data[i].eng_score, data[i].math_score, data[i].avrg); } return 0; }
Forums:
fgets() 를 쓰면 됩니다.. 아래 코드가 너무 무성의하다면 죄송
fgets() 를 쓰면 됩니다..
아래 코드가 너무 무성의하다면 죄송..
삽질의 대마왕...
scanf등에는 뒤에 '\n'이 입력 버퍼에 남아 있게 됩니다.다음
scanf등에는 뒤에 '\n'이 입력 버퍼에 남아 있게 됩니다.
다음을 참고 하세요
http://bbs.kldp.org/viewtopic.php?t=508&highlight=scanf
http://bbs.kldp.org/viewtopic.php?t=400&highlight=scanf
http://bbs.kldp.org/viewtopic.php?t=381&highlight=scanf
좀더 많은 것을 알고 싶으면 scanf로 검색해 보세요
[quote="litdream"][code:1] whil
(1)은 필요없습니다. fgets가 알아서 해줍니다.
혹시 이런 것을 의도하셨는지도 모르겠군요.
doldori 님 감사합니다. 저렇게 쓰고 싶었던거 맞습니다.. 꾸
doldori 님 감사합니다. 저렇게 쓰고 싶었던거 맞습니다..
꾸뻑.
삽질의 대마왕...
원하시는 바에 따라 다르겠지만, 저렇게 끝의 '\n'을 날려버릴 때는 조
원하시는 바에 따라 다르겠지만, 저렇게 끝의 '\n'을 날려버릴 때는 조심해야 합니다. 입력된 한 줄이 버퍼의 길이보다 길 경우 문자열이 '\n'으로 끝나지 않아서 아직 같은 줄에 읽지 않은 내용이 있다는 것을 판별할 수 있는데, '\n'을 날려버리면 그걸 알 수 없게 되기 때문입니다.
예컨대
에 "Hello, World!<Enter>"를 입력으로 주었을 경우가 됩니다.
댓글 달기