2015-04-04 50 views
0

我必須創建一個函數來寫出字母表中可用的字母。例如,用戶類型a和功能輸出將是bcdefgh...函數的輸出值與循環中的printf值不匹配

如果我在循環中使用printf一切都沒問題。但是,如果我將該字母寫入數組,然後我想打印出數組,則會在輸出中得到完整的字母表。

void getAvailableLetters(const char lettersGuessed[],char availableLetters[]){ 
char abeceda[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','q','p','r','s','t','v','u','w','x','y','z'}; 
printf("Available letters: "); 
int x=0; 
int i; 
for(i=0 ; i<strlen(abeceda); i++){ 
    for(int j=0 ; j<strlen(lettersGuessed); j++){ 
     if(abeceda[i] == lettersGuessed[j]){ 
      x=1; 
     } 
    } 
    if(x==0){ 
     availableLetters[i]=abeceda[i]; 
     //printf("%c",abeceda[i]); 
    } 
    x=0; 
} 
printf("%s",availableLetters);} 

如果我使用printf在註釋輸出還是不錯的,但是從陣列availableLetters輸出包含完整的字母表。

+2

'','z'};' - >','z',0};' – BLUEPIXY 2015-04-04 22:19:04

+0

翻譯BLUPIXY的評論 - 如果你打算使用'abededa'字符數組作爲'string',你必須'null-終止'數組就像一個'字符串'.. – 2015-04-04 22:35:47

回答

1

availableLetters [i] = abeceda [i];

這顯然是錯誤的,因爲availableletters包含的字母少於整個字母表,所以我不能用於索引。您也從來沒有在完整的availableletters char數組中設置一個空字節,所以它不應該作爲字符串打印。你應該清理可用的字母,例如 availableLetters [0] = 0; 然後給它自己的增量說 int j = 0; 然後向上添加一個字母到數組 ,並在最後make upLetters [j + 1] = 0;

0

那麼其明確的,沒有任何地方,你從拼音串取出一封信,你需要像

 if(abeceda[i] == lettersGuessed[j]){ 
       for(int k=i;k<strlen(abeceda);k++){ 
        abeceda[k]=abeceda[k+1]; 
       } 
       x++; 
     } 

這應該刪除字符串的信,也移動終止到一個新的指數

+0

這似乎無法正常工作。 – BLUEPIXY 2015-04-04 22:37:22

+0

是的,我用錯了索引,現在應該沒問題 – Ruli 2015-04-04 22:41:02

+0

還是壞...... – BLUEPIXY 2015-04-04 22:42:42