鱼C论坛

 找回密码
 立即注册
查看: 1393|回复: 11

[已解决]关于 getchar()获取字符的疑惑

[复制链接]
发表于 2021-10-7 09:17:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 一阵三十六 于 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.读取字符的不连续。
7Y)J(UEQ%W(VE[VK3CXQ`.png

问一下问题在哪里。
最佳答案
2021-10-7 18:56:40
一阵三十六 发表于 2021-10-7 18:51
条件不能写在while()里吗?为什么在里面就没法运行呢?

不能,写在 while 里面,如果输入的字符不是大写,就执行 while 后面的代码了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-7 09:34:35 | 显示全部楼层

回帖奖励 +5 鱼币

#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;
}  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-7 09:45:59 | 显示全部楼层
本帖最后由 一阵三十六 于 2021-10-7 09:47 编辑


为什么要进行这种赋值?
直接用为什么不行呢?
    char ch;
    while(ch = getchar(), ch >= 'A' && ch <= 'Z')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-7 09:57:11 | 显示全部楼层

这样也有无法统计的地方。 [HAY$YR%Y)]@R@78V9@`F2J.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-7 09:59:46 | 显示全部楼层

回帖奖励 +5 鱼币

本帖最后由 桃花飞舞 于 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[nums]!='\0')
        {
                if(p[nums]>='A'&& p[nums]<='Z')
                {
                        num++;
                        printf("%c\n",p[nums]);
                }
                nums++;
        }
        printf("进入循环的次数:%d\n",nums);
        printf("大写字母的数目为:%d\n",num);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-7 11:04:42 | 显示全部楼层

回帖奖励 +5 鱼币

谢谢你的鱼币!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-7 11:12:50 From FishC Mobile | 显示全部楼层
一阵三十六 发表于 2021-10-7 09:45
为什么要进行这种赋值?
直接用为什么不行呢?

调用一次 getchar 就会得到一个新的字符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-7 11:56:01 | 显示全部楼层
人造人 发表于 2021-10-7 11:12
调用一次 getchar 就会得到一个新的字符

如果没有ch=getchar(),就只调用一次,而只能得到第一个字符并输出,是这样吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-7 14:37:38 | 显示全部楼层
#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;
}  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-7 18:51:38 | 显示全部楼层

条件不能写在while()里吗?为什么在里面就没法运行呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-7 18:56:40 | 显示全部楼层    本楼为最佳答案   
一阵三十六 发表于 2021-10-7 18:51
条件不能写在while()里吗?为什么在里面就没法运行呢?

不能,写在 while 里面,如果输入的字符不是大写,就执行 while 后面的代码了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-7 19:06:40 | 显示全部楼层
人造人 发表于 2021-10-7 18:56
不能,写在 while 里面,如果输入的字符不是大写,就执行 while 后面的代码了

好的谢谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 13:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表