2016-04-07 181 views
-2

我已經在此工作了一段時間,但我不斷收到{0,0,0,0,0}或{2751685,2751685等}或{57,58,59,60,等}字符串到int數組

void getGuess(int guess[], int length) { 
     char thisGuess[length]; 
     int i=0; 
     printf("Enter your guess.\n"); 
     scanf("%s", &thisGuess); 

     for(i=0; i<length; i++) { 
      printf("the guess = %d\n",(int)thisGuess[i]) ; 
      guess[i] = (int)(thisGuess)-48; 

      printf("%d ", guess[i]); 
     } 
    } 

我想輸入一個字符串,12345,並得到這麼

guess[0] = 1 
guess[1] = 2 
guess[2] = 3 
etc 

在我的代碼的建議嗎?

+2

我懷疑'48'是用來從數字'0'轉換爲整數值'0'。如果這是正確的:**不要**使用魔術數字!你混淆了你的代碼。只需使用_character整數常量_「0」即可。 – Olaf

+1

使用你在for循環中用scanf得到的字符串的實際長度,而不是你的長度參數... – Unimportant

+0

'(int)(thisGuess) - 48'應該是'thisGuess [i] - 48'(或者最好是'' 0'而不是'48')。你也應該停止在剛剛發生的輸入(不是'length')的末尾進行循環,並且如果輸入長度超過'length',你需要一些方法來防止緩衝區溢出。 –

回答

0

char數組的長度通常不等於它所包含的C風格字符串的長度。

void getGuess(int guess[], int length) { 
    char thisGuess[length]; 
    size_t i = 0; 
    printf("Enter your guess.\n"); 
    scanf("%s", thisGuess); // a char *, rather than a char (*)[length] is expected 
    size_t guessLength = strlen(thisGuess); 
    for(i = 0; i < guessLength; i++) { 
     printf("the guess = %d\n", thisGuess[i]); 
     guess[i] = thisGuess - '0'; 
     printf("%d ", guess[i]); 
    } 
} 

備選地,添加

if(!isdigit(thisGuess[i])) 
    continue; 

以避免潛在的結合外的訪問。