课后作业的一个小疑问
#include <stdio.h>int main()
{
printf("请输入一行英文句子:");
int i=0;
while(getchar()!='\n')
{if(getchar()>='A' && getchar()<='Z')
i=i+1;
}
printf("你总共输入了%d个大写字母!",i);
return 0;
}
以上代码有bug,执行结果是错的,猜测原因是在循环体中if()的条件语句中再次调用getchar(),而此时用户没有进行输入,所以程序结果是错的,但是不知道我的猜想对不对,想请教一下,谢谢~ #include <stdio.h>
int main()
{
printf("请输入一行英文句子:");
int i = 0;
char t;
t = getchar();
while (t!= '\n')
{
if (t >= 'A' && t <= 'Z')
i = i + 1;
t = getchar();
}
printf("你总共输入了%d个大写字母!", i);
return 0;
}
改成这样子呢? getchar的意思是从键盘获得一个字符,所以你这样写的话就只会看你输入的第一个字符是否为大小写 本帖最后由 major_lyu 于 2020-2-25 21:36 编辑
#include <stdio.h>
int main()
{
printf("请输入一行英文句子:");
int i=0;
char ch;
//while(getchar()!='\n')
//{if(getchar()>='A' && getchar()<='Z') // 每一次调用getchar() 都会读入一个字符,你这样写,相当于读取了三个字符,第一个字符在while条件与‘\n'比较;第二个和’A‘比较;第三个和’Z‘比较。正确的应该是读取一个字符做三次判断
while((ch = getchar()) !='\n') //
{
if(ch >= 'A' && ch <= 'Z')
{
i=i+1;
}
}
printf("你总共输入了%d个大写字母!",i);
return 0;
}
页:
[1]