getchar 发生了什么?
What is happening with getchar?
我只是在这里寻找解释。我有一个简单的程序循环:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
while(1)
{
printf("ready to begin? Enter y or n: ");
char begin = getchar();
if(begin == 'y')
{
break;
}
else if(begin == 'n')
{
printf("good-bye.");
return 0;
}
}
printf("hu-ray\n");
return 0;
}
当我编译并 运行 时,大部分行为都是预期的。示例:'y' 作为输入。
Ready to begin? Enter y or n: y
hu-ray
'n' 作为输入也给出了预期的行为以及只需按 ENTER。
Ready to begin? Enter y or n: n
good-bye.
Ready to begin? Enter y or n:
Ready to begin? Enter y or n:
但是,如果我输入任何其他内容,例如 'k',我会得到:
Ready to begin? Enter y or n: k
Ready to begin? Enter y or n: Ready to begin? Enter y or n:
比较奇怪,输入'12345'的输出:
Ready to begin? Enter y or n: 12345
Ready to begin? Enter y or n: Ready to begin? Enter y or n: Ready to begin? Enter y or n: Ready to begin? Enter y or n: Ready to begin? Enter y or n: Ready to begin? Enter y or n
即使查看了 getchar()
的手册页,我还是不明白这里发生了什么。有人有解释吗?
每次调用 getchar()
returns 一个字符。因此,当您在该提示下键入一行时,接下来的几个字符已经提供给下一次调用 getchar()
.
您可能想打电话给 fgets()
。
我只是在这里寻找解释。我有一个简单的程序循环:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
while(1)
{
printf("ready to begin? Enter y or n: ");
char begin = getchar();
if(begin == 'y')
{
break;
}
else if(begin == 'n')
{
printf("good-bye.");
return 0;
}
}
printf("hu-ray\n");
return 0;
}
当我编译并 运行 时,大部分行为都是预期的。示例:'y' 作为输入。
Ready to begin? Enter y or n: y
hu-ray
'n' 作为输入也给出了预期的行为以及只需按 ENTER。
Ready to begin? Enter y or n: n
good-bye.
Ready to begin? Enter y or n:
Ready to begin? Enter y or n:
但是,如果我输入任何其他内容,例如 'k',我会得到:
Ready to begin? Enter y or n: k
Ready to begin? Enter y or n: Ready to begin? Enter y or n:
比较奇怪,输入'12345'的输出:
Ready to begin? Enter y or n: 12345
Ready to begin? Enter y or n: Ready to begin? Enter y or n: Ready to begin? Enter y or n: Ready to begin? Enter y or n: Ready to begin? Enter y or n: Ready to begin? Enter y or n
即使查看了 getchar()
的手册页,我还是不明白这里发生了什么。有人有解释吗?
每次调用 getchar()
returns 一个字符。因此,当您在该提示下键入一行时,接下来的几个字符已经提供给下一次调用 getchar()
.
您可能想打电话给 fgets()
。