2013-10-26 1 views
0

내 주요 질문은 왜 fflush (stdin)입니까? 기능이 작동하지 않습니까? 코드를 실행할 때마다 두 번째 입력에 공백을 넣을 수 없습니다. 안녕하세요 세계 그러나 대신 나는여보세요 ?? 감사합니다fflush (stdin) 기능이 작동하지 않습니다.

#include <stdio.h> 

main(){ 

    int  x; 
    double y; 
    char  string[100]; 

    /* 

     * string input 

     */ 

    printf("Enter one word: "); 
    scanf("%s", string); // note there is no & before string */ 
    printf("The word you entered was >>%s<<\n"); 

    printf("Enter many words: "); 
    fflush(stdin); // <---- for some reason this function is not working 
    scanf("%[^\n]", string); // read up to a newline (multiple words) 

    printf("The text you entered was >>%s<<\n"); 

    getchar(); 
} 
+0

[플러싱 입력 스트림] (http://c-faq.com/stdio/stdinflush.html)을 참조하십시오. –

+0

문제는'fflush (stdin)'과 아무 관련이 없습니다. 누락 된 매개 변수와 관련이 있습니다. 아래를 참조하십시오. (두 번째 매개 변수를 얻은 다음 형식 지정 작업을 할 수 있습니다) – ryyker

답변

4

fflush(stdin)은 정의되지 않은 동작입니다. fflush()은 출력 스트림에 대한 C 표준 및 마지막 작업이 출력 인 업데이트 스트림에서만 정의됩니다.

+1

POSIX에서 파생 된 시스템에서'fflush (stdin)'은 정의되지 않은 동작을합니다. Windows 기반 시스템에서이 동작은 Microsoft에 의해 문서화되어 입력 버퍼에 이미있는 모든 데이터가 삭제됩니다. – P0W

+3

현재 플랫폼이 무엇이든 C 언어에 따라 아직 정의되지 않았으므로 OP는 구현에 대한 세부 정보를 제공하지 않습니다. 입력 스트림에 대한'fflush()'의 동작은 구현에 정의되지 않고 표준에 따라 정의되지 않으므로 구현시 의미있는 동작을 정의하더라도 표준 C 관점에서는 항상 오류입니다. –

+0

@PaulGriffiths - 귀하의 진술에 동의하고 명시된 문제를 다루지 만 실제 문제는 두 부분으로 나누어 져 있으며 fflush()의 잘못 사용하여 기여하지도 않았습니다. 1) 문제 설명 영역의 코드 OP가 _ 사용하는 것과 일치하지 않으면 런타임 오류가 발생합니다. 2) (첫 번째와 관련된)'printf()'에 추가 매개 변수'string'이 있으면 코드가 실행됩니다. OP가 말했듯이 실행해야합니다. – ryyker

1

출력 결과가 모두 나오면 문제 설명 영역에 표시 한 코드가 실제로 사용하는 코드가 아니기 때문입니다.

진술 내용 :
두 번째 입력을 공백으로 가져올 수 없습니다. 안녕하세요 세계 그러나 대신 나는여보세요 ??.
printf() 문에 추가 매개 변수가 없으면 출력이없고 런타임 오류가 발생합니다. 다른 매개 변수를 필요로 printf("The word you entered was >>%s<<\n");

라인 (두 곳)과 같이 ,string을 추가

printf("The text you entered was >>%s<<\n", string); 

문제가 해결됩니다. 여기

printf() (그리고 fflush()을 제거하지)에서 매개 변수 string을 추가 한 후 출력
enter image description here
분명히, fflush(stdin); 적어도 언급 한 문제에 대한, 여기에 정말 문제가되지 않습니다입니까?

+0

설명해 주셔서 고맙지 만 주요 문제는 해결되지 않습니다. 배열 이름은 이미 첫 번째 요소의 주소이므로 다른 매개 변수가 필요하지 않습니까? 내가 틀렸다면 알려주세요. – mvitagames