S1E13统计大写字母
#include <stdio.h>int main() {
int count = 0;
char ch;
printf("请输入一个英文句子:");
ch = getchar();
while (ch >= 'A' && ch <= 'Z' ) {
count++;
}
printf("共有%d个大写字母", count);
return 0;
}
不管我怎么输入都是输出0个{:10_262:} ,不知道怎么回事
下面是我的另一个想法:使用数组储存字符串然后遍历,但是大小写交错或者出现空格就错误了{:10_262:}
#include <stdio.h>
int main() {
int count = 0;
char ch;
int i = 0;
printf("请输入一个英文句子:");
scanf("%s", ch);
while (ch >= 'A' && ch <= 'Z' ) {
count++;
i++;
}
printf("共有%d个大写字母", count);
return 0;
} 嗯,先看第一个程序吧,getchar()。需要注意的是,getchar函数等待输入直到按回车键才结束,,回车键前所输入的全部字符都会在屏幕上显示,但是只有第一个字符作为函数的返回值。(一本学校教材上的原话)听懂吗?大白话就是在你的写的函数里ch的值只是你输入全部字符的第一个,然后一旦你输入第一个是大写字母,你仔细看,就会变成死循环了(还没在电脑实验,不过我说的这句应该没错)
第二个程序,我还有点事,一会儿再发 本帖最后由 肖-肖 于 2021-5-26 18:33 编辑
直接说你改进的程序说起吧,先说下你的改进
1.改成了%s -->说明你认识到getchar()只能接收一个字符!
2.改成了数组-->说明你认识到要用数组来放字符串!
鹅 很棒,思路是对的,{:10_275:}就是一些小问题需要知道下就好了!
最大的问题是while循环ch >= 'A' && ch <= 'Z' 中的循环体--》i++放在了里边
这样写的话会导致当遇到小写字母的时候无法i++从而导致后边的字符无法正确(因为一致停留再那个小写字符上了嘛~)判断 对吧
还有个小问题是:scanf这个接收的话只能接收不带有空格的字符串,知道就OK了
所以我进行了改进
代码如下:
#include <stdio.h>
int main() {
int count = 0;
char ch;
int i = 0;
printf("请输入一个英文句子:");
//scanf("%s", ch);
while ((ch=getchar())!='\n') {
//判断
if(ch >= 'A' && ch <= 'Z' )
{
count++;
}
i++;
}
printf("共有%d个大写字母", count);
return 0;
}
运行结果如下:
你只接受了一次getchar()要放循环里
#include <stdio.h>
int main() {
int ch;
int count= 0;
while( (ch= getchar() ) != EOF ){
if (ch>='A' && ch<= 'Z' )
count++;
}
printf("%d\n",count);
return 0;
}
第二种大写字母不是进入循环的条件 应在循环里用if判断 不然怎么遍历数组
#include <stdio.h>
int main() {
int count = 0;
char ch;
int i = 0;
printf("请输入一个英文句子:");
gets(ch);
while ( ch !='\0' ) {
if(ch >= 'A' && ch <= 'Z' )
count++;
i++;
}
printf("共有%d个大写字母", count);
return 0;
} 好吧好吧,刚去吃个饭,结果被他们都快说完了,有什么不懂再问,本来想要最佳的{:10_266:} 王之叹息 发表于 2021-5-26 18:57
好吧好吧,刚去吃个饭,结果被他们都快说完了,有什么不懂再问,本来想要最佳的
{:5_105:} 王之叹息 发表于 2021-5-26 18:57
好吧好吧,刚去吃个饭,结果被他们都快说完了,有什么不懂再问,本来想要最佳的
下次建议饿着{:10_307:} 万千只cnm 发表于 2021-5-26 18:34
你只接受了一次getchar()要放循环里
你的第一个代码我怎么用不了 最强废铁h 发表于 2021-5-26 21:32
你的第一个代码我怎么用不了
咋用不了 编译不了吗
万千只cnm 发表于 2021-5-26 21:46
咋用不了 编译不了吗
https://z3.ax1x.com/2021/05/26/2CZEvQ.png 王之叹息 发表于 2021-5-26 18:07
嗯,先看第一个程序吧,getchar()。需要注意的是,getchar函数等待输入直到按回车键才结束,,回车键前所 ...
意思是getchar()只能输出第一个字符吗{:10_272:} 肖-肖 发表于 2021-5-26 18:21
直接说你改进的程序说起吧,先说下你的改进
1.改成了%s -->说明你认识到getchar()只能接收一个字符!
2.改 ...
{:10_262:}忘了,小写字母会跳出循环来着 万千只cnm 发表于 2021-5-26 18:34
你只接受了一次getchar()要放循环里
把getchar()放进循环里的作用是每输入一个字符就执行一次循环吗 C++太极门小弟子 发表于 2021-5-26 23:05
意思是getchar()只能输出第一个字符吗
getchar是用来输入一个字符的呀,只不过它的返回值是输入字符的整形阿斯克码 最强废铁h 发表于 2021-5-26 22:58
ctrl + z 结束EOF
或者改成 != '\n' C++太极门小弟子 发表于 2021-5-26 23:12
忘了,小写字母会跳出循环来着
对吧 还是我解释的关键吧 哈哈 别人能要最佳我为什么不能 我也想要
页:
[1]