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

每当我必须以这种方式使用 getchar 时,它也接受 enter 作为输入之一,因此我只能输入三个字符而不是 6 个字符。为什么 getchar 将 enter 作为输入之一?如何避免这种情况?

输入:

1
2
3

在此循环中断后,因为按下的三个返回被视为 temp[1]、temp[3] 和 temp[5] 的三个输入。

4

5 回答 5

9

getchar一次读取一个字符。按下Enter键时,您将换行符传递\n给 C 标准缓冲区,getchar下次调用getchar. 为了避免这个\n字符,你可以试试这个

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

另请阅读此答案以了解其getchar工作原理。

于 2013-12-23T10:17:46.133 回答
5

检查空格字符,不要添加/计算它。getchar() 返回您点击的所有字符,包括换行符和空格。

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

    putchar(temp[i]);
    i++;
}
于 2013-12-23T10:22:21.037 回答
1

getcharstdin从缓冲区中一次读取一个字符。一旦您输入一个字符并按 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++;
                }
        }
} 
于 2013-12-23T10:29:14.120 回答
1

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

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

如何避免这种情况?正如黑客所建议的那样

于 2013-12-23T10:29:24.653 回答
0

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

while(1)
{
    if(i == 6)
        break;
    temp[i] = getchar();
    getchar();
    putchar(temp[i]);
    i++;
}
于 2013-12-24T02:11:36.807 回答