从getchar读取输入

时间:2013-12-23 10:16:02

标签: c++ c getchar getch putchar

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 个答案:

答案 0 :(得分:9)

getchar一次读取一个字符。在按 Enter 键时,您将换行符\n传递给C标准缓冲区,getchargetchar的下一次调用时也会读取该标准缓冲区。要避免使用此\n字符,您可以尝试使用此

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

另请阅读此answer以了解getchar的工作原理。

答案 1 :(得分:5)

检查空格字符,不要添加/计数。 getchar()返回你击中的所有字符,包括新的行和空格。

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

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

答案 2 :(得分:1)

getchar一次从stdin缓冲区读取一个字符。输入一个字符然后按Enter键,然后在stdin缓冲区中存储两个字符。

如果您想使用代码输入六个字符,请一次输入所有字符,然后按Enter键即可。否则你将不得不跳过“输入”字符。像这样...

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

答案 3 :(得分:1)

为什么getchar作为输入之一输入?

字符输入函数一次读取一个字符流的输入。调用时,这些函数中的每一个都返回流中的下一个字符,如果已到达文件末尾或发生错误,则返回EOF。 一些字符输入函数被缓冲(例如:getchar())。这意味着操作系统将所有字符保存在临时存储空间中,直到我们按 Enter ,然后系统将字符发送到stdin流。

如何避免这种情况? 正如haccks

所建议的那样

答案 4 :(得分:0)

这个方法怎么样。你可以两次使用getchar()。 像这样,

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