2015-09-20 2 views
1

J'essaie de convertir une chaîne contenant un nombre de 16 bits en binaire en une valeur entière. Il est un devoir et je dois utiliser scanf ("% 1d ....). Le problème que j'ai est que la fin de l'habitude de la boucle, je n'ai pas la moindre idée comment le résoudre.chaîne au format binaire en entier

par exemple : entrée: 0000000000001111
sortie:. 15

int read_binary_value() 
{ 
int value = 0; 

while(scanf("%1d", &value) == 1) 
{ 
    printf("%d ", value); 
    if (value == 1) 
    { 
     value += 1; 
     value << 1; 
    } 

} 
printf("yoyoyoyoyoyoyo"); 
printf("%d",value); 

return value; 
} 
+0

votre expression while revient probablement lorsque vous la terminez. Vérifiez s'il y a une autre façon de l'exprimer. – ergonaut

+0

il ne parvient pas à la partie "yoyoyoyoy" quand je le compile, je ne comprends pas que – Lethalbeast

+0

une boucle boucle jusqu'à ce que la condition soit fausse, sinon elle fonctionnera pour toujours. Dans votre cas, il va scanner pour toujours. – ergonaut

Répondre

1

J'ai modifié votre code et il fonctionne

int read_binary_value() 
{ 
    int total=0; 
    int value; 
    while(scanf("%1d", &value) == 1) 
    { 
     printf("%d", value); 
     if(!(value==0||value==1)) 
     { 
      //Generate Error Message and Exit program 
     } 
     total = total << 1; 
     if (value == 1) 
     { 
      total += 1; 
     } 

    } 
    printf("yoyoyoyoyoyoyo\n"); 
    printf("%d",total); 
    return total; 
} 

votre arrêt de boucle lorsque obtenir la fin du fichier Appuyez sur CTRL + Z pour les fenêtres et Ctrl +D pour linux. Ce sont des caractères de fin de fichier.

+0

merci beaucoup! existe-t-il des options pour éviter d'appuyer sur CTRL + Z? – Lethalbeast

+0

Avec scanf() dans cette condition, je ne sais pas. Vous pouvez lire comme une chaîne puis le convertir en entier. – ashiquzzaman33

+1

Il est dingue d'exiger l'utilisation de 'scanf ("% 1d ")' en premier lieu. Utiliser getchar() rendrait beaucoup plus de sens. 'scanf' et les amis ne sont presque jamais la bonne solution à tout problème d'analyse syntaxique. – chqrlie

0

Si vous souhaitez obtenir 16 entrées, vous pouvez utiliser for(i=0;i<16;i++) au lieu du while pour exécuter la boucle 16 fois et terminer. Ou bien dans la boucle while vous pouvez donner if(i==16) break; en incrémentant i à la fin de la boucle. Si vous devez arrêter manuellement la boucle, EOF char est l'option.