【发布时间】:2025-12-13 15:35:02
【问题描述】:
我正在创建一个程序,如果我输入的字符返回 true 是一个大写字母,当我输入字符“0”时循环停止。代码如下:
#include <stdio.h>
int main (void)
{
char c;
do
{
printf ("Please enter character to check if uppercase: ");
c = getchar ();
if ( (c >= 'A') && (c <= 'Z') )
{
printf ("true\n");
}
else
{
printf ("false\n");
}
} while ( c != '0');
return 0;
}
但是,我得到了奇怪的行为(输出):
请输入字符以检查是否大写:a
假
请输入字符检查是否大写:false
请输入字符检查是否大写:b
假
请输入字符检查是否大写:false
请输入字符以检查是否大写:A
是的
请输入字符检查是否大写:false
请输入字符检查是否大写:0
假
-
提示后出现的“错误”不是我输入的。
例如:
- 1。出现提示
- 2。我输入字符'a'
- 3。控制台打印错误
- 4。提示出现但也打印了提示旁边的“假”字样
- 5。提示再次出现
所以看起来 getchar() 正在接受不是来自我的输入。 有什么想法吗?
【问题讨论】:
-
你反复提到scanf,但你的代码只使用
getchar。请在您的问题中更加小心,以免让回答者感到困惑。 -
@ChrisHayes SO 允许您编辑其他人的问题。正如您所指出的,由于代码仅使用
getchar()进行输入,因此我编辑了问题以将提到的scanf()替换为getchar()。 -
getchar的返回类型是int,你应该把它存入一个int类型的变量中,并与EOF比较;另见what happens if you usechar c = getchar()instead ofint