Leonardo||Watch 2019-08-16 12:54 采纳率: 100%
浏览 674
已采纳

while循环中getchar到底是怎么运行的呢?

下面两段代码的运行结果为什么不一样?
其中第一段代码能正常统计字母的个数,而第二段代码的结果很奇怪。
第二段代码的结果是:输入s,输出1;输入ss,输出2;输入sss,输出2;
输入ssss,输出3;输入sssss,输出3......

#include<stdio.h>

int letter=0;

int main()
{
    char words;



    while((words=getchar())!='\n')
    {
        if ('a'<words<'z')
        {
            letter++;
        }


    }


    printf("字母个数:%d\n",letter);

    system("pause");
    return 0;
}

#include<stdio.h>

int letter=0;

int main()
{
    char words;



    while(words=getchar())
    {
        if ('a'<words<'z')
        {
            letter++;
        }
        if (getchar()=='\n')
        {
            break;
        }


    }


    printf("字母个数:%d\n",letter);

    system("pause");
    return 0;
}

  • 写回答

2条回答 默认 最新

  • JonathanYan 2019-08-16 13:12
    关注

    因为你第二个while中执行了两次getchar,你一次循环应该只读入一个字符,但是你读了两次,肯定不会对。
    getchar不会帮你存储上次的读取结果,每调用一次读到的就是下个字符。
    其次

    if('a'<word<'z')
    //这种写法不正确,必须写成
    if('a'<word && word <'z')
    

    你第一段代码运行正确是侥幸,因为你输入的字符都是小写且没其他字符,这种判断永远为真,因为它等效于

    if(('a'<word)<'z')
    

    等价于

    if(true<'z');  if(1<'z');
    //和
    if(false<'z'); if(0<'z');
    

    把现在的问题弄懂了就赶紧解决掉这个问题

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 欧阳筱苒 2019-08-16 13:05
    关注

    letter+=1;

    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 关于网上一个easyx制作的见缝插针小游戏(c++)
  • ¥15 开地址法双散列函数处理碰撞
  • ¥15 想问一下这个是什么情况 虚拟机Linux打不开了
  • ¥15 联通光猫掉注册了怎么重新注册上去
  • ¥15 关于unity开发steamvr程序遇到的问题
  • ¥60 求tc downloader的下载方式
  • ¥15 华为 快捷方式 手电筒 接口
  • ¥15 Qt6.5支不支持Android13开发啊
  • ¥20 网络只能跑一半,应该如何设置
  • ¥20 Python调用百度开发者平台人脸识别接口