我目前正在通過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