C语言实现输入多行英文句子然后统计单词数和行数,如何输入?我的代码问题在哪里?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

C语言实现输入多行英文句子然后统计单词数和行数,如何输入?我的代码问题在哪里?

2016-06-08 22:27:48 2918 1
int main(){
    char s[100]={0};
    char *p=s;
    int num=0,flag=0,wnum=0,line=0;
    while ((gets(s))!=EOF) {
        if ((*p>='a'||*p<='z')||(*p>='Z'||*p<='A')) {
            wnum++;
            if (flag==0) {
                *p-=32;
            }
            flag=1;
        }
        else{
            if (flag==1){
                num++;
                flag=0;
                
            }
            if (*p=='\n'||*p=='\0') {
                line++;
            }
            
        }
        p++;
    }
    int ave=wnum/num;
    printf("Number of lines: %d\nNumber of words: %d\nAverage length of a word: %d",line,num,ave);
}

输入多行之后,command+z还是结束不了输入
请问问题在哪里?
有什么更好的接受多行文字的方法吗?
这是原题,希望不是我错误理解题意了……
谢谢...

取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 19:32:50

    楼主试试在printf之前输出num,很大概率是等于0的。
    最严重的问题:

    (如果以下看不懂请移动至最下面,对gets()函数的分析)
    1、gets(s)每次返回一行而不是一次性返回EOF之前的全部字符!楼主可能是这一点想错了,如果不是请看下面的分析。
    2、为什么num=0? gets(s)每次读一行,s是字符串,楼主每次只判断了一个字符p,就继续下一次循环了,输入的样例很可能会导致num=0的就是num++那句不会执行。应该再加一重循环while(p!='0')判断s里的每个字符。
    3、每次判断一行数字,p就应该从s的开头开始,所以 char *p=s应该放在while(get(s))这个循环里面。

    其他的方法我推荐用while((ch=getchar())!=EOF),这个你的思路挺符合的,一个字符一个字符判断,你可以去搜这句,挺经典的。

    int getchar ( void)
    返回值为用户输入的ASCII码,读到文件末尾返回EOF,EOF的值是-1
    从方法上说,可以用空格或换行判断单词数,'n'判断行数。按照题目来说应该是没有句号或逗号的。
    比如

    char ch;
    while((ch=getchar())!=EOF){

    if(ch=='\n') {
        lineNum++; 
        wordNum++;
    }
    else if(ch==' ') { 
        wordNum++;

    }
    printf("%d %d",lineNum,wordNum);
    while(1); // 按Ctrz+z后卡死在这里可以看输出的结果
    我测试了下,目测正确。

    抱歉,之前没仔细看代码,就看了一行while(gets(s)!=EOF) 。就直接写答案了,刚刚想起其实好像也没什么问题,所以去看了你的代码。

    之前的回答:

    楼主用的是C编译器的吧,我用C++编译器编译不过的。ERROR:ISO C++ forbids comparison between pointer and integer 。

    gets() 错了,gets()返回的是指针,EOF是int整数,应该用while(gets(s)!=NULL) 。

    如下:

    函数原型是char gets (char buffer ); 读取成功返回和buffer相同的指针,遇到错误或EOF返回NULL。
    执行时,不断从stdin读取字符,遇到换行符或EOF时停止,并将读取的结果存放在buffer中。注意换行符会被转换为‘0’(空字符),加在buffer的后面。

    0 0
相关问答

1

回答

C语言指针之间的有效运算包括哪些?

2022-04-03 19:00:51 926浏览量 回答数 1

1

回答

C语言中的指针和数组之间的区别是什么?

2022-04-03 13:06:41 978浏览量 回答数 1

1

回答

C语言函数返回值可以是指针吗?

2022-03-29 19:32:33 173浏览量 回答数 1

1

回答

C语言数组名和指针的区别在哪里?

2022-03-29 18:03:43 140浏览量 回答数 1

4

回答

c语言函数中传地址跟传指针有什么不同?

2016-06-06 09:51:26 2113浏览量 回答数 4

1

回答

C语言指针传值和传地址问题

2016-06-06 09:46:05 1686浏览量 回答数 1

1

回答

C语言初始化数组导致指针重叠

2016-05-30 14:17:32 2118浏览量 回答数 1

4

回答

初学 C语言,请问有什么书或者习题集是可以强化指对指针的理解的吗?

2016-03-20 09:37:13 2153浏览量 回答数 4

1

回答

C语言:进程间传递指针来实现数据操作是否会有安全隐患?

2016-03-20 11:23:26 1862浏览量 回答数 1

1

回答

c语言,指针那一块,关于重新编写strlen函数

2016-03-19 14:15:05 1700浏览量 回答数 1
+关注
0
文章
14879
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载