2009-09-20 5 views
0

저는 C 프로그래밍을 처음 접했고 Java 배경에서 왔습니다. 왜 다음 코드에서 while 루프에서 입력을 10 번 입력 한 다음 10 개의 입력을 모두 표시해야하는지 궁금합니다. 한 번 입력하고 바로 표시하려고합니다. 그런 다음 다른 입력을 계속 입력하십시오.C while 루프 도움말

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


main(){ 

print(PROGRAM_INFO); //prints program name and author 
print(PROMPT); 

char input [100]; //array to hold input from user 
int isActive = 1; //1 continue shell, 0 terminate shell 
int count = 0; 

while (isActive == 1 && count < 10){ 
    print(PROMPT); 
    ++count; 
    scanf("%s", input); 
    print(input); 


} 


} 

답변

5

하는 기본 입력하여 각 print(input)

+0

fflush (stdout); 잘 했어. 모두 – user69514

+0

네, fflush는 확실히 '\ n'에 비해 더 좋은 방법이 될 것입니다. – LJM

+0

감사합니다. 비슷한 문제에 대해 저를 도왔습니다. 이제 물어볼 필요가 없습니다! – Sankofa

1

인쇄물에 '\ n'문자를 넣으십시오. 스트림은 그냥 플러시되지 않습니다.

1

최종 인쇄문 다음에 fflush (stdout)을 호출 할 수 있습니다. stdout을 화면에 내 보냅니다.

1

STDOUT을 플러시해야합니다. fflush(STDOUT)해야하며 인쇄 후에 추가해야합니다.

1

fflush(stdout) 플러싱 시도/출력 버퍼링, 즉 입출력 바이트 스트림에 표시되기 전에 바이트 어레이에 저장된다.
시스템의 BUFSIZ는 일반적으로 1024의 배수입니다. printf가 줄 바꿈되어 있지만 줄 바꿈이 발생하면 버퍼가 자동으로 플러시됩니다.
fflush(stdout)은 버퍼링 된 데이터를 출력 스트림 (이 경우에는 stdout)으로 플러시합니다. setvbuf() 함수를 사용하여 버퍼 처리를 제어 할 수 있습니다.

+0

stdout은 버퍼 된 라인이므로 BUFSIZ 문자를 기다릴 필요가 없습니다. –

+2

fflush는 버퍼링 된 데이터를 "화면에 표시"하지 않습니다. 이로 인해 프로그램의 stdout 스트림이 버퍼를 플러시합니다. * stdout이 화면에 현재 표시된 tty와 연결되어 있으면 텍스트가 화면에 표시됩니다. (다른 말로하면, stdout은 화면이 아니며 그 가정을하지 마십시오.) –

+0

@ William, thomas .. 지적 된대로 편집 한 의견을 보내 주셔서 감사합니다. – sud03r

0

print은 복사/붙여 넣기 오류입니다. 맞습니까? printf이어야합니다.

그리고 정말로 사용자 문자열을 printf 형식으로 직접 인쇄하면 안됩니다. 표준 출력은 라인 기본적으로 버퍼링 때문에
사용자 유형 "%d%f%s\a%c" 상상 ...

가장 좋은 것은 할 수는 형식으로 '\ n을'로

printf("%s\n", input); 

, 당신은 fflush(stdout); 할 필요가 없습니다 '\ n'은 그 자체로 하나를합니다.

또한 사용자가 "%d%f%s\a%c"을 입력하면 인쇄본이 출력됩니다. 할


가장 좋은 것은

puts(input); 

풋 출력에 '\ n을'을 추가하고 형식 문자열에 문제가없는 것입니다.