C for循环失败

时间:2018-02-08 02:49:08

标签: c loops for-loop

所以我是C语言的新手,我尝试用用户输入的单词的长度做直方图,我有一个解决方案,但我的第二个for循环总是失败,我的代码就像5 for循环,它们每个都在第二次或第三次迭代后停止,我错过了一些请帮助。这是我的代码。

#include<stdio.h>
int main(){
    int i,x,c,r,size;
    int wa[10];
    size=0;
    for(i=0;i<10;i++){
        wa[i]=0;
    }
    while((c=getchar())!=EOF){
        switch(c){
            case' ':{
                wa[size]++;
                size=0;
                break;}
            case'\n':{
                wa[size]++;
                size=0;
                break;}
            case'\t':{
                wa[size]++;
                size=0;
                break;}
            default:{
                size++;
                break;
            }
        }
    }

    for(r=0;r<=10;++r){
        printf("%d",r);
        for(x=0;x<wa[r];x++){
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

2 个答案:

答案 0 :(得分:1)

  • 首先,出于测试目的,从Linux命令行运行时 Ctrl + d 模拟EOF

    • 第二,你的for循环在(0 -10)之间迭代,你的wa数组索引的范围是(0 - 9),这意味着:

      为(X = 0; X

    调用可能会导致SEGFAULT

    • 第三,你错过了一个简单的例子,输入只是一个没有空格的单词,比如
      

    abcdEOF

    • 第四,在向数组输入valus时第二段之后你的索引是错误的

    • 假设最长的单词是10char long,那么你必须确认size永远不会超过9的值,或者你是否会更正wa更新超过此值的10将导致由于更新数组中未分配的索引而导致的段错误

希望这有帮助

答案 1 :(得分:0)

第一个for循环将从1开始,而在第二个for循环中用wa [r]替换wa [4]。

您的代码还假设任何单词都不会超过10个字符。