|
1鱼币
- #include <stdio.h>
- #include <string.h>
- #define MAX 1024
- int main()
- {
- char str[MAX];
- char ch;
- int i, n, r = 1, c = 0, mc = 0;
- // char result[r][mc];
- printf("请输入一个英文句子:");
- while((ch = getchar()) != '\n')
- {
- str[i] = ch;
- i++;
- }
- n = strlen(str);
- for (i = 0; i < n; i++)
- {
- if (str[i] == ' ')
- {
- r++;
- if (mc < c)
- {
- mc = c;
- }
- c = 0;
- continue;
- }
- c++;
- }
- printf("%d,%d\n", r, mc );
- return 0;
- }
复制代码
这个程序目前的功能是输入一段话,根据空格来判断单词数和最长单词长度,运行结果会报segmentation fault
请大神帮忙看看是什么问题! 谢谢!
本帖最后由 小腿跑乱刀 于 2018-9-26 13:39 编辑
主要原因在于for循环中的if语句,
你的代码是每当遇到一个空格就会进行一次比较,
但是,当输入一系列单词后,最后的一个单词往往是不添加空格而是直接回车的,
这意味着你输入的最后一个单词实际上根本没有进行比较,也就没有纳入统计的结果之中。
当然除了这一个问题还有其他的一些问题需要你自己再思考着改改,比如你的变量r统计的是单词的个数吧,在还没有统计的时候单词个数应该为0,而你将其初始化为了1。
但恰巧就像我前面说的你的程序忽略了输入的最后一个单词,这反而造成了单词个数的统计结果是正确的(但实际上做法是错误的)。
我去上课前大概写了下,参考一下吧,可能也有错
- #include <stdio.h>
- #define IN 1
- #define OUT 0
- int main(int argc, char **argv)
- {
- int num_word = 0, maxlen = 0, count = 0;
- int state = OUT;
- char c;
-
- int flag;
-
- while((c = getchar()) != '\n')
- {
- flag = (c == ' ' | c == '\t');
- if(!flag & state == OUT)
- {
- state = IN;
- num_word++;
- count++;
- }
- else if(!flag & state == IN)
- {
- count++;
- }
- else if(flag & state == IN)
- {
- if(count > maxlen) maxlen = count;
- state = OUT;
- count = 0;
- }
- }
- if(count > maxlen) maxlen = count;
- printf("num_word:%d maxlen:%d\n", num_word, maxlen);
- return 0;
- }
复制代码
另外你是统计一句话的单词数,所以我给while的判断条件是不等于'\n',如果要统计一段话的单词书只需要不等于EOF或者不等于一个负整数就行了
|
最佳答案
查看完整内容
主要原因在于for循环中的if语句,
你的代码是每当遇到一个空格就会进行一次比较,
但是,当输入一系列单词后,最后的一个单词往往是不添加空格而是直接回车的,
这意味着你输入的最后一个单词实际上根本没有进行比较,也就没有纳入统计的结果之中。
当然除了这一个问题还有其他的一些问题需要你自己再思考着改改,比如你的变量r统计的是单词的个数吧,在还没有统计的时候单词个数应该为0,而你将其初始化为了1。
但恰巧就像 ...
|