2014-04-11 7 views
-1

을 건너 뜁니다.이 함수를 호출 할 때마다 그 내부의 fgets 문을 건너 뜁니다.이 함수를 호출 할 때마다 함수 호출은 함수의 문

void getString(char *str){ /* Read a string from the keyboard */ 
    fprintf(stdout,"Please enter a string: "); 
    fgets(str,MAX_STRING_LEN,stdin); 
} 

여기에 프로그램과는 fgets에서 다른 함수 호출

if(strcmp(cmd,"new")==0){ /* new string command */ 
     getString(current); 
} 
+2

정말로 호출 되었습니까? "현재"란 무엇입니까? 디버거 (인라인?) 또는 아무 것도 출력하지 않기 때문에 호출되지 않았다고 생각하십니까? –

+2

@ haccks 출력을 의미한다고 생각합니까? 플러싱 '표준'은 UB입니다. –

+0

@ FilipeGonçalves; 죄송합니다. 내 의견을 삭제 :) – haccks

답변

1

당신은 아마 scanf와의 사용을 혼합하는()의(). 필요한 경우 문자열을 다른 데이터 유형으로 변환하려면 sscanf()를 사용하는 것보다 항상 모든 문자열에 대해 fgets()를 사용하십시오.

http://c-faq.com/stdio/scanfinterlace.html

0

가 fprintf와의 출력 (3)에 버퍼링되어

더욱 자세하게 설명을 때 comp.lang.c의 FAQ 참조. 입력 내용을 읽기 전에 프롬프트를 강제로 해제하려면 해당 버퍼를 플러시해야합니다. stderr 채널은 일반적으로 버퍼링되지 않으므로 수동으로 플러시하지 않고 채널에 쓸 수 있습니다.