Чтение ввода из getchar

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

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

Входные данные:

1
2
3

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

5 ответов

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

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

Также прочитайте этот ответ, чтобы узнать как getchar работает.

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

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

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

Зачем getchar принимает вход в качестве одного из входных данных?

Функции ввода символов считывают ввод из потока по одному символу за раз. При вызове каждая из этих функций возвращает следующий символ в потоке, или EOF если достигнут конец файла или произошла ошибка. Некоторые функции ввода символов буферизуются (пример: getchar()). Это означает, что операционная система хранит все символы во временном пространстве хранения до тех пор, пока мы не нажмем клавишу Enter, а затем система отправит символы в stdin поток.

Как этого избежать? Как предложено хаки

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++;
                }
        }
} 

Как насчет этого метода. Вы можете использовать getchar() два дважды. Как это,

while(1)
{
    if(i == 6)
        break;
    temp[i] = getchar();
    getchar();
    putchar(temp[i]);
    i++;
}
Другие вопросы по тегам