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

Всякий раз, когда я должен был использовать GetChar таким образом, он принимает также ввести в качестве одного из входных данных и, таким образом, я сдержанный ввести только три символов вместо 6. Почему GetChar принимает ввести в качестве одного из вход? Как этого избежать?Чтения входа с GetChar

Входной сигнал:

1 
2 
3 

После того, как этот цикл перерывов, так как все три возвращается прессованные рассматриваются как три входа до температуры [1], темп [3] и температуры [5].

ответ

9

getchar читает персонажа за раз. При нажатии Введите. Вы передаете символ новой строки \n в стандартный буфер C, который также читается getchar при следующем вызове getchar. Чтобы избежать этого \n персонажа вы можете попробовать это

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

прочитать Кроме того, это answer знать, как getchar работы.

+1

Ah, 6 upvotes? Кто-нибудь действительно компилировал и запускал код? Цикл будет прерван для печати 6 символов на экране, если пользователь вводит символ один раз. – WKPlus

+0

@haccks yes as WKplus сказал, что он сломается, прежде чем я этого не хочу, потому что вход один символ в строке – Mcolorz

+0

@Mcolorz вместо этого использует код rajenpandit. – WKPlus

5

Проверьте символ пробела и не добавляйте/не подсчитывайте его. getchar() возвращает все ваши персонажи, включая новые строки и пробелы.

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

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

getchar считывает один символ за один раз от stdin буфера. после ввода символа и нажатия Enter, а затем в stdin буфера сохраняются два символа.

Если вы хотите ввести шесть символов, используя свой код, введите сразу все символы и нажмите клавишу ввода, и он будет работать. в противном случае вам придется пропустить символ «Ввод». как это ...

#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++; 
} 
Смежные вопросы