Horbyn4zZ 2017-02-26 04:30 采纳率: 100%
浏览 2450
已采纳

求助:先定义一个字符数组再逐个元素赋值,和直接c=getchar()的不同!!!

我在写一段这样的代码:
输入一行字符,统计其中有多少个单词,单词之间用空格分隔开

 #include<stdio.h>

int main()
{
    int i,num=0,word=0;
    char c,string[100];
    gets(string);
    for(i=0;(c=string[i])!='\0';i++)
    {
        if((string[i]>='A'&&string[i]<='Z')||(string[i]>='a'&&string[i]<='z'))
        {
            num=1;
        }
        else 
        {
            num=0;
            word++;
        }
    }
    printf("the word has %d words.\n",word);
    return 0;
}

这段代码输出是正常的,能够统计出有多少个单词。
图片说明
但是下面这段代码就输出得不正常了。

 #include<stdio.h>

int main()
{
    int i,num=0,word=0;
    char c,string[100];
    for(i=0;(c=getchar())!='\n';i++)
    {
        if((string[i]>='A'&&string[i]<='Z')||(string[i]>='a'&&string[i]<='z'))
        {
            num=1;
        }
        else 
        {
            num=0;
            word++;
        }
    }
    printf("the word has %d words.\n",word);
    return 0;
}

图片说明

就处理输入数据那里作了改动而已,出这差错的原因是什么啊

  • 写回答

1条回答 默认 最新

  • leewers 2017-02-26 06:01
    关注

    第二个版本的char数组string根本没有用来读取输入啊,(c=getchar()这个才是用来读取的变量,应该使用c来判断)还停留在定义时的状态,你却用来作为条件判断了,由于其内容为undefined的状态,所以
    if((string[i]>='A'&&string[i]<='Z')||(string[i]>='a'&&string[i]<='z'))这个判断有很大可能为假,所以增加了计数器。实际效果相当于是数整个输入有多少个字符(包括空白字符)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏