2016-11-12 2 views
0

J'ai ce code et je veux que ma boucle se termine lorsque l'utilisateur donne "###".fgets en langage C impressions multiples après avoir obtenu la chaîne

int main(){ 

    char s[10]; 

    printf("Give string: "); 
    fgets(s,11,stdin); 
    do{ 
     printf("Give string: "); 
     fgets(s,11,stdin); 
    }while (s!="###"); 
    return 0; 
} 

Jusqu'à présent, il est ok, mais lorsque l'utilisateur donne une entrée plus de 11 caractères j'avoir plusieurs copies de « Give String ». Je l'ai essayé avec scanf et je l'ai fait correctement. Quelqu'un peut-il me donner une solution pour le faire avec fgets? I mean the output looks like this.

+3

Deux points: vous ne pouvez pas comparer une chaîne C avec 's = "###"', et 'fgets' comprend toute fuite' newline', dans la chaîne, donc même 'strcmp' ne fonctionnera pas. –

+1

BTW, vous déclarez 'scar s [10];' donc au plus neuf caractères et l'octet nul de fin, mais vous appelez 'fgets' avec * 11 *; et une question fix-my-code est hors-sujet! –

+1

De plus, ne lisez pas 11 caractères dans un tableau de 10 caractères. –

Répondre

0

chaîne C ne supporte pas la comparaison directe, vous devez strcmp pour cela, si

while (s!="###") devrait être while(strcmp(s,"###"))

vous auriez également besoin de retirer \n de fgets (de façon à strcmp ignorez \n). Ainsi, le do..while devrait ressembler à:

do{ 
    printf("Give string: "); 
    fgets(s,11,stdin); 
    s[strlen(s) - 1] = '\0'; 
} while (strcmp(s,"###"));