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].
getchar
читает символ за раз. По нажатию Войти ключ вы передаете символ новой строки \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
читает по одному символу за раз 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
принимает вход в качестве одного из входных данных?
Функции ввода символов читают ввод из потока по одному символу за раз. При вызове каждая из этих функций возвращает следующий символ в потоке, или EOF
если достигнут конец файла или произошла ошибка.
Некоторые функции ввода символов буферизуются (пример: getchar()
). Это означает, что операционная система хранит все символы во временной области памяти, пока мы не нажмем Войти , а затем система отправляет символы в stdin
поток.
Как этого избежать?
По предложению haccks
как насчет этого метода. Вы можете использовать getchar () два дважды.
Как это,
while(1)
{
if(i == 6)
break;
temp[i] = getchar();
getchar();
putchar(temp[i]);
i++;
}