2016-04-07 36 views
-2

私はこれをしばらくの間、作業してきましたが、{0,0,0,0,0}、{2751685,2951685など}または{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

数字「0」から整数値「0」への変換に「48」が使用されていると思われます。それが正しい場合は:**マジックナンバーを使用しないでください!あなたはコードを難読化します。 _character整数constant_'''0''を使用してください。 – Olaf

+1

長さのパラメータではなく、あなたのforループでscanfで得られた文字列の実際の長さを使用してください... – Unimportant

+0

'(int)(thisGuess) - 48'は 'thisGuess [i] - 48'(または、 0''48ではなく)。また、ちょうど起こった入力( 'length'ではなく)の最後でループを止めて、' length'以上の値を入力するとバッファオーバーフローを防ぐ何らかの方法が必要です。 –

答えて

0

通常、文字配列の長さは、それに含まれる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; 

を追加します。