2016-04-07 3 views
-2

Я работал над этим некоторое время, но я продолжаю получать либо {0,0,0,0,0}, либо {2751685, 2751685 и т. Д.} Или {57,58,59,60, и т.д.}String to int array

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 integer constant_ ''0''. – Olaf

+1

Используйте фактическую длину строки, которую вы получили с помощью scanf, в вашем цикле for, а не в параметре длины ... – Unimportant

+0

'(int) (thisGuess) - 48' должно быть' thisGuess [i] - 48' (или предпочтительно ' 0'', а не '48'). Также вы должны прекратить цикл в конце введенного ввода (не 'length'), и вам нужно каким-то образом предотвратить переполнение буфера, если они печатают больше, чем' length'. –

ответ

0

Длина массива символов обычно не равна длине содержащейся в ней строки стиля С.

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; 

, чтобы избежать возможности вне переплете доступа.