2016-04-07 30 views
-2

Bir süredir bunun üzerinde çalıştım, ancak {0,0,0,0,0} veya {2751685,2751685 vb.} Veya {57,58,59,60, ya da vb}Dize için dizi dizisi

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]); 
     } 
    } 

Ben bir dize, 12345 girin ve benim kodunda böylece

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

öneri bunu almak istiyorum?

+2

'' '' 0 'rakamından '0' tamsayı değerine dönüştürmek için kullanılır. Eğer bu doğruysa: ** Sihirli sayıları kullanmayın! Kodunu karıştırıyorsun. Sadece _character integer constant_ ''0'' kullanın. – Olaf

+1

Uzunluğunu parametrenize değil, for döngüsünüzde scanf ile aldığınız dizenin gerçek uzunluğunu kullanın ... – Unimportant

+0

'(int) (thisGuess) - 48' bu olmalıdır' thisGuess [i] - 48' (veya tercihen '' 0 'yerine 48'). Ayrıca, sadece gerçekleşmiş olan girdinin sonunda ('' '' '' '' '' '' '' '' '' '' '' '') '' döngüsünü durdurmalı ve 'length'den daha fazla yazıyorsa, arabellek taşmalarını engellemenin bir yolunu bulmalısınız. –

cevap

0

Bir char dizisinin uzunluğu genellikle içerdiği C stili dizenin uzunluğuna eşit değildir.

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]); 
    } 
} 

Alternatif dışı bağlı erişim potansiyeli önlemek için

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

ekleyin.