所以我是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;
}
答案 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个字符。