c언어 프로그래밍 질문입니다.
글쓴이: alexei123 / 작성시간: 화, 2014/06/24 - 1:04오전
1 #include<stdio.h> 2 3 int main(void) 4 { 5 int k = 0; 6 char tempId[10] = {0}; 7 char tempPw[10] = {0}; 8 int n = 0; 9 10 while(1) 11 { 12 printf("<Menu>\n"); 13 printf("1. Play game\n"); 14 printf("2. Ranking\n"); 15 printf("3. Exit\n"); 16 printf("Select menu : "); 17 scanf ("%d", &n); 18 19 if(n == 1) 20 { 21 printf("<Login>\n"); 22 23 printf("ID : "); 24 25 for(k = 0; k < 10; k++) 26 { 27 scanf("%c", &(tempId[k])); 28 29 if(tempId[k] == '\n') 30 break; 31 } 32 33 printf("PW : "); 34 for(k = 0; k < 10; k++) 35 { 36 scanf("%c", &(tempPw[k])); 37 38 if(tempPw[k] == '\n') 39 break; 40 } 41 } 42 } 43 44 return 0; 45 }
제가 id를 입력한다음 pw를 입력하려고 하는데
이 프로그램을 실행시키면면
1. Play game 2. Ranking 3. Exit Select menu : 1 ID : PW :
이렇게 뜹니다
ID를 입력하지도 않았는데 바로 PW로 넘어가는데 어떤게 잘못된 건가요??
Forums:
Select menu 입력 시
scanf에서 1개의 정수값을 받는데, 입력으로는 1 + 엔터가 들어가네요.
fflush 함수를 참조하심이
fflush 함수를 참조하심이 어떠실런지...
http://andyader.blogspot.kr/2013/09/fflush.html
scanf()는 입력이 일정한 format을 갖추어진
scanf()는 입력이 일정한 format을 갖추어진 경우에만 쓰는 것이 좋습니다. 사실 제 경험상, 아예 안 쓰는 것이 좋습니다.
사용자에게 입력을 받는 경우 (즉, 어떤 입력이 들어올지 전혀 예상할 수 없는 경우), fgets()로 읽고, sscanf()로 원하는 데이터를 얻는 것을 추천합니다.
아니면, fgets()로 읽고, strtok() 등을 써서 원하는 데이터를 얻을 수도 있습니다.
표준 함수만 써야 한다는 제약이 없다면, fgets() 대신, getline()을 쓰는 것이 더 좋습니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
+1
그 옛날에도 같은 문제를 호소하는 분들이 많았는데 지금껏 똑같은 걸 보면 참 재미있습니다. 특히 예전에는 책에도 왜 저렇게 되는 것인지 설명하는 경우가 잘 없어서 (책을 쓸 정도의 사람에게는 너무도 당연한 것이기 때문에 적지 않은 것이겠지만) 혼란이 더욱 가중되었죠. 요즘 책들은 어떤지 모르겠네요.
--
댓글 달기