Чтение ввода из 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].

1

Решение

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

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

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

9

Другие решения

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

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

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

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

1

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

while(1)
{
if(i == 6)
break;
temp[i] = getchar();
getchar();
putchar(temp[i]);
i++;
}
0
По вопросам рекламы [email protected]