Чтение ввода из 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++;
}