2017-05-24 4 views
0

je suis autodidacte programmeur je fais face à un problème ici que si la condition pour entrer seulement (H OR T OR.) n'obtient pas la chaîne. aller à la (printf ("Enter valid characters please \n");)Comportement étrange si la condition

ci-dessous est mon code:

int i = 0 ; 
int L ; 

printf ("Please enter the lenght of report \n"); 
scanf ("%d" , &L); 

if (L>=1 && L<=500) 
{ 
     printf ("Please enter the Reoprt \n"); 
     string P = get_string(); 
     if (P[i] !='H' && P[i] != 'T' && P[i] != '.') 
     { 
       printf ("Enter valid characters please \n"); 
     } 
     else 
     { 
       printf ("GOOD3 \n"); 
     } 
} 
else 
{ 
     printf ("Please enter valid Length \n"); 
} 
+0

Comment est-ce que 'i' est traité? –

+0

Est-ce que c'est 'C'? Que fait 'string P'? Que fait la fonction 'get_string()'? – Gaurav

+6

@GauravPathak cs50.h, oui nous tous le détestons. Il est typedefed à char *. –

Répondre

0

La raison que vous rencontrez ce problème est parce que scanf("%d", &L) va chercher un ou plusieurs chiffres de l'entrée et rien d'autre. Par conséquent, il laissera derrière le caractère de nouvelle ligne que vous avez entré après avoir tapé votre numéro. Lorsque vous appelez get_string() (je suppose que c'est la même chose que GetString() dans la bibliothèque CS50?), Le premier caractère qu'il voit est ce caractère de nouvelle ligne résiduelle, donc tout ce que vous obtenez est une chaîne vide.

Vous pouvez résoudre ce problème assez facilement. Il suffit de remplacer scanf ("%d" , &L); par L = GetInt();.

Ou encore, remplacer scanf ("%d" , &L); avec scanf ("%d%c" , &L, &newline);, avec newline déclarée comme une variable char en haut de votre fonction main(). Cela consommera le saut de ligne qui suit le nombre, de sorte que GetString() ne le traitera pas comme une chaîne vide. Pour plus de détails sur comment fonctionne scanf(), tapez man scanf sur la ligne de commande.