2016-05-15 46 views
-1

程序應該收到一個字符串,然後檢查每個字母被提及的頻率。當我嘗試運行此代碼時,cmd關閉

多少到目前爲止,我已經這樣做了(我只會在這個階段檢查信A

int main(int argc, char const *argv[]) 
{ 
    int i=0; 
    int l,k; 
    int r=10; 
    char list[10][10] ; 
    /* recieve a strng*/ 
    char str[10] ; 
    fgets(str, 10, stdin); 
    str[10] = 0; 

    /*initialise list[] to -'s */ 
    for (l = 0; l < 10; l++) { 
     for(k=0; k<10; k++) { 
      list[l][k]='-' ; 
     } 
     printf("\n"); 
    } 

    /*checks if the letter== "A" if yes replace with * */ 
    for (i = 0; i < 10 ; ++i) { 
     if (str[i]== 97) { 
      list[r][0]='*'; 
      r--; 
     } 
    } 

    /*print the second list[] */ 
    for (l = 0; l < 10; l++) { 
     for(k=0; k<10; k++) { 
      printf("%c ", list[l][k]); 
     } 
     printf("\n"); 
    } 
    return 0; 
} 

我將讀取字符串代碼之前,測試它和它的工作,但它不是什麼我想:/

char list[10]; 
fgets(str, 10, stdin); 
str[10] = 0; 

任何想法,我應該專注於使它再次工作? 我在做什麼錯?

回答

3

的問題,因爲我看到它是在

list[r][0]='*'; 

這裏的r10,這勢必外的訪問。它調用undefined behavior

記住,C陣列使用0爲基礎的索引。因此,對於像

int arr[10] = {0}; 

數組的有效索引爲0到9

除此之外,使用字母直接ASCII值,比如if (str[i] == 97)不是非常便攜的做法。您應該使用if (str[i] == 'A')以獲得更好的效果。

這就是說,我不太清楚你的代碼的邏輯,它不會做任何你想做的事情,從任何角度來看。

相關問題