Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C for循环失败_C_Loops_For Loop - Fatal编程技术网

C for循环失败

C for循环失败,c,loops,for-loop,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语言新手,我尝试用用户输入的单词长度做一个直方图,我有一个解决方案,但我的第二个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;
}
#包括
int main(){
整数i,x,c,r,大小;
int wa[10];
尺寸=0;

对于(i=0;i第一个for循环将从1开始,第二个for循环将wa[4]替换为wa[r]

您的代码还假定单词长度不会超过10个字符。

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

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

      对于(x=0;x
    呼叫可能导致SEG故障

    • 第三,您缺少一个简单的情况,即输入只有一个单词,后面没有空格,例如
    abcdEOF

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

    • 假设最长的单词长度为10char,这很好,但您必须验证
      大小
      从未超过9的值,或者如果您要更正
      wa
      更新,则超过该值10将由于更新数组中未分配的索引而导致segfault


希望这有帮助

为什么
wa[4]
特别?我猜
default
是在找到字母时执行的,但仍然不清楚。与@coderredoc聚合为什么wa[4]特别。您的默认大小写只增加大小而不是w[]。我尝试编译此代码并运行该程序,但我被无限地困在while循环中。oh wa[4]只是为了测试其余代码是否正常工作…要完成白色循环,请在控制台中按ctrl+c。请显示输入和输出示例,指出您认为输出不正确的原因。是的,我的错误,我使用了wa[4]要测试代码的其余部分是否正常工作,问题是我在while之后编写的每个循环都没有完成。@jaredjosaffhatz有没有任何迹象表明循环已经开始?