黑马程序员技术交流社区

标题: 下面的代码我怎么输入打印的值都是1,求大神帮忙 [打印本页]

作者: shenxian88    时间: 2015-4-29 14:42
标题: 下面的代码我怎么输入打印的值都是1,求大神帮忙
本帖最后由 shenxian88 于 2015-4-30 00:39 编辑

#include <stdio.h>
int main(){
    char s[81],c;//定义一个数组,c接收字符
     int num = 0,word=0;//num表示单词的个数,word做单词的标记

    printf("请输入一句英语,单词之间用空格隔开:");//提示用户输入

    scanf("%s",s);

    for (int  i=0; (c=s)!='\0'; i++) {

        if (c==' ') word = 0;//如果c是空字符,那么标志word就等于0

        else if(word==0){word = 1;num++;}//当word == 0的时候就执行就执行括号里面的再把word赋值1;num++

    }
    printf("There are %d words.\n",num);//打印单词的个数
    return 0;
}


作者: 流风124    时间: 2015-4-29 16:48
本帖最后由 流风124 于 2015-4-29 16:51 编辑

scanf函数的问题,不接收空格、回车和Tab,可以改成gets()函数,但是会有警告
另外程序本身写的有点问题 c=s 这句是不对的,c是字符,s是字符串,怎么直接赋值?应该是 c=s,这里其实用while函数更好,也没有必要定义c来接收每一个字符,不过这里就按你的思路来吧
还有你的代码规范不是很好,还是多多注意一点
下面是我改的代码,结果没错

  1. #include <stdio.h>
  2. int main(){
  3.     char s[81],c;//定义一个数组,c接收字符
  4.     int num = 0,word=0;//num表示单词的个数,word做单词的标记
  5.    
  6.     printf("请输入一句英语,单词之间用空格隔开:");//提示用户输入
  7.    
  8.     gets(s);
  9.    
  10.     for (int  i = 0; ( c = s[i] ) != '\0'; i++) {
  11.         
  12.         if (c == ' ')
  13.         {
  14.             word = 0;//如果c是空字符,那么标志word就等于0
  15.         }
  16.         else if(word == 0)
  17.         {
  18.             word = 1;
  19.             num++;
  20.         }//当word == 0的时候就执行就执行括号里面的再把word赋值1;num++
  21.         
  22.     }
  23.     printf("There are %d words.\n",num);//打印单词的个数
  24.     return 0;
  25. }
复制代码

作者: shenxian88    时间: 2015-4-29 17:16
流风124 发表于 2015-4-29 16:48
scanf函数的问题,不接收空格、回车和Tab,可以改成gets()函数,但是会有警告
另外程序本身写的有点问题 c= ...

谢谢,大神,我知道了






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2