2015-01-06 4 views
-2

이클립스 환경에서 C 프로젝트에서 코드가 정확하고 실행 가능하지만 출력이 인 경우 프로그램이 사용자에게 묻는 메시지를 에 입력하고 1-5의 숫자를 입력 한 다음 이름을 묻습니다 난 당신이 개행 문자를 출력하지 않는 한, 출력 버퍼링 상태로 유지됩니다, 그래서 (콘솔에 갈 때) 문제는 표준 출력 라인 버퍼링이다이 값잘못된 순서로 프로그램 출력이

#include <stdio.h> 
#include <stdlib.h> 

int main(void) { 

    char name[20], address[30]; 

    char c; 
    printf("How do you feel on a scale of 1-5?"); 
    c = getchar(); 

     printf("Enter name: "); 
     scanf("%s", &name); 

     printf("Enter your address: "); 
     scanf("%s", &address); 

     printf("Entered Name: %s\n", name); 
     printf("Entered address:%s\n", address); 

     printf("You said you feel: "); 
     putchar(c); 

    return EXIT_SUCCESS; 
} 
+0

놀랍지 만 Eclipse에는 문제가 없습니다. 프로그램이 작동하지 않으면 코드가 잘못되었습니다. – JJJ

+0

어떻게 물건이 고장 났는지 설명 할 수 있습니까? – ryanyuyu

+0

올바른 순서는 1 ~ 5 등급으로 어떻게 느껴 집니까? 이름 입력 : ryanyuyu, 주소 입력 이집트 :하지만 나와 함께 출력은 1 ryanyuyu 이집트 1-5의 척도로 느끼십니까 입력 한 이름 : ryanyuyu 입력 한 주소 : 이집트 당신이 말한대로 : 1 – Elhaw

답변

0

를 입력하지 않으면 다음 거리 아무것도하지만, 콘솔 화면에 표시 표시되지 않습니다. (OK, 버퍼링 할 수있는 최대 크기가 있습니다. 세부 사항 만 입력하면 소량의 출력이 버퍼에 남아 있습니다).

나에게 발생하는 두 가지 해결책은 처음 3 번째 printf 호출 후에 fflush (stdout);을 사용하면 stdout 버퍼가 콘솔로 플러시되고 문제를 해결해야합니다.

또한 작동합니다 (모든 출력 전) 주의 시작 근처에서이 전화를 걸기 (안된), 표준 출력의 버퍼링을 해제 할이 작업을 수행하는 방법에 대한 setvbuf를 볼 수 있지만 내가 생각할 수 :

setvbuf (stdout, NULL, _IONBF, 0); 
+0

감사합니다. @Andrew 첫 번째 해결책은 프로그램 시작 부분에 – Elhaw

+0

으로 시작되었습니다. 나는 setvbuf를 사용했으며 – Elhaw

+0

이 scanf ("% s", &name); scanf에 공백 문자가 있음)를 사용합니다. – EsmaeelE

0

문제는 두 번째 scanf가 이전 입력의 \ n 문자를 캡처하고,이 동작을 피하기 위해 fgets를 사용하려고하는 것입니다.

관련 문제