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]的三个输入。
答案 0 :(得分:9)
getchar
一次读取一个字符。在按 Enter 键时,您将换行符\n
传递给C标准缓冲区,getchar
在getchar
的下一次调用时也会读取该标准缓冲区。要避免使用此\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++;
}