我目前正在通过K & R,我已经成为卡住,在搜索网络后,再次尝试,并搜索更多我来到stackoverflow为帮帮我!使用getchar时奇怪的行为,计算一个字的字符数
的任务是创建一个直方图,该直方图聚合每个单词中的字母数,然后将该信息显示为直方图。
我已经想出了直方图部分,但是我在计算单词时遇到了问题。
当我输入几个字,然后按Ctrl + D发送EOF,并打印每个字符输入的出现次数;我与索引大值[0] noramlly以防万一“15773951”
只是为了澄清我的代码将不断加入到厕所返回,用于计算字符,直到一个空格,换行或选项卡found.it将值然后使用一个数组来存储每个字大小发生的次数,方法是增加与字大小相等的索引位置。
int main(void){
int c, i, status, wc;
int numbers[array_size];
wc = 0; //used to count number of chars
//innitialize array
for(i=1; i<array_size; i++)
numbers[i] = 0;
/*start counting letters*/
while((c = getchar()) != EOF){
/*check if c is a space*/
if((c=' ')||(c='\t')||(c='\n')){
numbers[wc-'1']++;
wc = 0;
}else{
++wc;
}
}
printf("word size occured: ");
for(i=0;i<array_size;i++)
printf("%d\n", numbers[i]);
}
有代码,任何人都可以向我解释为什么这种事总发生 也在这里是输出的一个例子:
word size occured: 15773951
0
0
0
0
0
0
0
0
0
你为什么不分配给零'号[0]'? if((c ='')||(c ='\ t')||(c ='\ n')){':“=”而不是“==”中的另一个错误。 –
另外,请注意代码'numbers [wc-'1'] ++;'是危险的,你应该检查索引是否大于或等于数组的长度,否则你会得到讨厌的记忆错误。 (这也造成了很多安全漏洞......) –
感谢那里的金块科林! – Babbleshack