Horbyn4zZ
Horbyn4zZ
采纳率72.7%
2017-02-26 04:30 阅读 2.3k
已采纳

求助:先定义一个字符数组再逐个元素赋值,和直接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 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'))这个判断有很大可能为假,所以增加了计数器。实际效果相当于是数整个输入有多少个字符(包括空白字符)

    点赞 评论 复制链接分享

相关推荐