2013-12-23 5 views
1
while(1) 
{ 
    if(i == 6) 
     break; 
    temp[i] = getchar(); 
    putchar(temp[i]); 
    i++; 
} 

이 방법으로 getchar를 사용해야 할 때마다 입력을 입력으로 받아들이므로 6 대신 3 자만 입력하도록 제한됩니다. 왜 getchar가 입력? 이것을 피하는 방법?getchar에서 입력 읽기

입력이 루프 중단 후

1 
2 
3 

때문에 온도에 3 개 개의 입력으로 간주 가압 세 복귀 [1] 온도 [3] 온도 [5].

답변

9

getchar은 한 번에 한 문자 씩 읽습니다. 눌렀을 때 키를 입력하면 C 표준 버퍼에 줄 바꿈 문자 \n이 전달됩니다. 다음 번에 getchar이 호출 될 때 getchar으로 읽습니다. 이 \n 문자를 방지하기 위해이

while(1) 
{ 
    if(i == 6) 
     break; 
    if((temp[i] = getchar()) != '\n') 
    { 
     putchar(temp[i]); 
     i++; 
    } 
} 

는 또한이 answer 방법 getchar 일을 알고 읽을 시도 할 수 있습니다.

+1

아, 6 개의 upvotes? 누구나 실제로 코드를 컴파일하고 실행 했습니까? 사용자가 char을 한 번 입력하면 루프가 beforce print 6 문자를 화면에 표시합니다. – WKPlus

+0

@ haccks 예, WKplus는 입력 전에 한 줄에 하나의 문자가 있기 때문에 내가 원하지 않는 것을 깨뜨린다고 말했습니다. – Mcolorz

+0

@Mcolorz는 rajenpandit의 코드를 대신 사용합니다. – WKPlus

5

공백 문자를 확인하고 추가/계산하지 않습니다. getchar()은 새로운 줄과 공백을 포함하여 적중 한 모든 문자를 반환합니다.

while(i < 6) 
{ 
    temp[i] = getchar(); 
    if (isspace(temp[i])) 
     continue; 

    putchar(temp[i]); 
    i++; 
} 
1

getcharstdin 버퍼로부터 한 번에 한 문자를 판독한다. 한 번 문자를 입력하고 Enter 키를 누르면 stdin 버퍼에 두 개의 문자가 저장됩니다.

코드를 사용하여 6자를 입력하고 모든 문자를 한 번에 입력하려면 Enter 키를 눌러 작동시킵니다. 그렇지 않으면 '입력'문자를 건너 뛰어야합니다. 이런 ...

#include<stdio.h> 
int main() 
{ 
     int i=0; 
     char temp[10]; 
     while(1) 
     { 
       if(i == 6) 
         break; 
       temp[i] = getchar(); 
       if(temp[i]!='\n') 
       { 
         putchar(temp[i]); 
         i++; 
       } 
     } 
} 
1

getchar 입력의 하나로서 입력합니까?

문자 입력 기능은 한 번에 한 문자 씩 스트림에서 입력을 읽습니다. 이러한 함수가 호출되면 각 함수는 스트림의 다음 문자를 반환하거나 파일 끝에 도달했거나 오류가 발생하면 EOF을 반환합니다. 일부 문자 입력 기능이 버퍼 됨 (예 : getchar()). 즉, 운영 체제는 을 입력하고을 입력 할 때까지 모든 문자를 임시 저장 공간에 저장 한 다음 시스템에서 해당 문자를 stdin 스트림으로 보냅니다.

어떻게 피 하시겠습니까? 제안 된대로 haccks

0

이 방법은 어떻습니까? getchar()를 두 번 사용할 수 있습니다.

while(1) 
{ 
    if(i == 6) 
     break; 
    temp[i] = getchar(); 
    getchar(); 
    putchar(temp[i]); 
    i++; 
}