2014-10-21 56 views
-3

我試過這麼多代碼試圖在直方圖中顯示我的數據。我一直被困在這個問題上兩天了,數據爬行互聯網等,以找到答案,但他們通常談論指針和其他。而這是更基本的。我試過一個顯示相同錯誤的實際直方圖,但爲了保持簡單,我選擇發佈這一個。爲什麼我在C中顯示數組時總是出現分段錯誤?

這是該計劃的從C編程語言的描述: 「寫一個程序,打印的字長度的直方圖的投入。」 我做這水平那我會做垂直。雖然在這個例子中,我只是試圖顯示數字,顯然。

#include <stdio.h> 
#define MAXIMUM 99 


main() 
{ 
int i, c, j, lenOfWord[MAXIMUM], charCount; 

for (i = 0; i < MAXIMUM; i++) 
    lenOfWord[i] = 0; 


printf("Starting program, please type then ctrl+d\n"); 



while((c = getchar()) != EOF) { 
    if (c == ' ') { 
     //new word 
     ++lenOfWord[charCount]; 
     charCount = 0; 
    } 
    else 
     //inword 
     ++charCount; 
} 

printf("\n Displaying now... \n"); 


for (j = 0; j <= MAXIMUM; j++) 
    printf("%d: %d", j, lenOfWord[j]); 


} 

輸出:

[email protected]:~/Desktop> gcc c.c -o c 
[email protected]:~/Desktop> ./c 
Starting program, please type then ctrl+d 
Hello my name is john jacksonSegmentation fault 

*在年底分段故障是我所得到的,當我做EOF(CTRL + d)

其他信息:從終端GCC編譯器的openSUSE Linux的

非常感謝,我在努力學習C,但是我碰到過很多這樣的路障,我感到很沮喪。

+1

編譯所有的警告和調試信息('GCC -Wall -Wextra -g')。使用調試器('gdb') – 2014-10-21 21:06:55

+3

'j> = MAXIMUM'?這將在第一次迭代中終止你的循環。 for()的第二個子句是循環終止條件。只要條件評估爲「真」,循環就會繼續執行。你基本上設置你的循環失敗,因爲'0> = 99'是錯誤的。 – 2014-10-21 21:08:00

+3

'int charCount = 0;' – BLUEPIXY 2014-10-21 21:11:11

回答

1

實際的問題是

++lenOfWord[charCount]; 
     charCount = 0; 

使用它之前,你還沒有初始化charCount0。第一循環

charCount = 0; 

while((c = getchar()) != EOF) { 

之前初始化爲0,並在循環分配charCount0是沒有用的。去掉它。

你必須檢查一件事。由於數組大小爲MAXIMUM。因此,您必須輸入charCount不超過MAXIMUM的支票。否則,它會再次給出segmentation fault

另一個問題是在for循環條件。取而代之的

for (i = 0; i < MAXIMUM; i++) 

將其更改爲

for (i = 0; i < MAXIMUM; i++) 

而且

for (j = 0; j >= MAXIMUM; j++) 

而不是

for (j = 0; j < MAXIMUM; j++) 

否則你不會得到任何輸出。

+0

我想你是對的,非常感謝。儘管如此,我認爲在空間之後將charCount設置回0對於該程序來說至關重要。字符數在空格爲0之後。 – user275564 2014-10-21 21:25:59

+0

示例中前兩個語句之間的區別是什麼? – user275564 2014-10-21 21:39:04

0

charCount變量未初始化

+0

謝謝先生/媽媽,問題解決了。我認爲這是我最後版本的程序中的問題。學過的知識! – user275564 2014-10-21 21:27:00

相關問題