关于 getchar()获取字符的疑惑
本帖最后由 一阵三十六 于 2021-10-7 09:21 编辑编写代码的目的:
统计一行英文字符中的大写字母的数目。
问题代码如下:
#include<stdio.h>
int main()
{
int nums=0;
printf("请输入一行英文句子:");
while(getchar()>='A' && getchar()<='Z')
{
nums++;
printf("%c\n",getchar());
}
printf("进入循环的次数:%d",nums);
return 0;
}
这个代码我已知两个问题:
1.不能完全统计大写字母的数目。
2.读取字符的不连续。
问一下问题在哪里。
#include<stdio.h>
int main()
{
int nums=0;
printf("请输入一行英文句子:");
char ch;
while(ch = getchar(), ch >= 'A' && ch <= 'Z')
{
nums++;
printf("%c\n", ch);
}
printf("进入循环的次数:%d",nums);
return 0;
}
本帖最后由 一阵三十六 于 2021-10-7 09:47 编辑
人造人 发表于 2021-10-7 09:34
为什么要进行这种赋值?
直接用为什么不行呢?
char ch;
while(ch = getchar(), ch >= 'A' && ch <= 'Z') 人造人 发表于 2021-10-7 09:34
这样也有无法统计的地方。 本帖最后由 桃花飞舞 于 2021-10-7 10:03 编辑
题目要求的是一个字符串,而getchar()是输入单个字符的函数。getchar()函数在我看来它是scanf的一个子集,getchar()只能输入单个的字符,根据你的代码共用了三次getchar()每个getchar都会读入一个字符包括比如:字母和回车,while中第一个getchar()读取一个字符,第二个getchar()读取一个字符,这两个字符是不同的所以这样写没意义,循环体中printf()里的getchar()是可以打印出一个字符。你可以输入两个字符后回车是给前两个getchar(),这时进入循环体此时再输入一次回车给到循环体中的getchar()。
针对题目我自己写了一个#include <stdio.h>
#include <malloc.h>
int main()
{
int nums = 0,num = 0;
char *p;
p = (char *)malloc(10*sizeof(char));
printf("请输入一行英文句子:");
scanf("%s",p);
//gets(p);
while(p!='\0')
{
if(p>='A'&& p<='Z')
{
num++;
printf("%c\n",p);
}
nums++;
}
printf("进入循环的次数:%d\n",nums);
printf("大写字母的数目为:%d\n",num);
return 0;
}
谢谢你的鱼币! 一阵三十六 发表于 2021-10-7 09:45
为什么要进行这种赋值?
直接用为什么不行呢?
调用一次 getchar 就会得到一个新的字符 人造人 发表于 2021-10-7 11:12
调用一次 getchar 就会得到一个新的字符
如果没有ch=getchar(),就只调用一次,而只能得到第一个字符并输出,是这样吗? #include<stdio.h>
int main()
{
int nums=0;
printf("请输入一行英文句子:");
char ch;
while(ch = getchar(), ch != '\n')
{
if(ch >= 'A' && ch <= 'Z') {
nums++;
printf("%c\n", ch);
}
}
printf("进入循环的次数:%d",nums);
return 0;
}
人造人 发表于 2021-10-7 14:37
条件不能写在while()里吗?为什么在里面就没法运行呢? 一阵三十六 发表于 2021-10-7 18:51
条件不能写在while()里吗?为什么在里面就没法运行呢?
不能,写在 while 里面,如果输入的字符不是大写,就执行 while 后面的代码了
人造人 发表于 2021-10-7 18:56
不能,写在 while 里面,如果输入的字符不是大写,就执行 while 后面的代码了
好的谢谢。
{:10_279:}
页:
[1]