0
votes

Utiliser STRCMP dans un certain temps pour casser la boucle

Je dois écrire un programme dans lequel le programme doit boucler et obtenir une entrée de l'utilisateur. Pour casser la boucle, l'utilisateur devra taper la sortie sur le clavier. Ce qui suit est mon code:

int main()
{
    char input[100];
    char terminate[100]="$exit";
    //if input does not equals to terminate keep asking user for input
    while(strcmp(input, terminate)!=0)
    {
        printf("$");
        fgets(input,100,stdin);
    }//otherwise, exit the program
}

c

1 commentaires

Quelle entrée espérez-vous après le symbole '$'?


3 Réponses :


2
votes

fgets lira le caractère EOL qui sera inclus dans la chaîne finale.

Vous pouvez utiliser strncmp pour simplement utiliser les caractères de "Terminez": STRNCMP (entrée, terminez, SHLEN (Terminez) . .


1 commentaires

Merci pour l'aide. J'apprécie vraiment votre aide!



0
votes

l'a compris. Voici ma solution:

while(strncmp(input, terminate,4)!=0)
    {
        printf("$");
        fgets(input,100,stdin);
    }


1 commentaires

Cela ne résout pas tous les problèmes et permettra à l'utilisateur d'entrer $ exi pour quitter.



2
votes

Il y a deux em> (et éventuellement trois) problèmes dans votre code comme vous le montrez:

  1. Le premier, qui est très grave, est que vous utilisez entrée code> avant son initialisation. Cela signifie que le contenu de la matrice est indéterminé em> (et pourrait être considéré comme "aléatoire" ou "ordures"). Qui va probablement conduire à comportement non défini em> lorsque vous l'utilisez dans STRCMP code> car ce n'est pas une chaîne corrigée nulle. p> li>

  2. Le deuxième problème est que fgets code> ajoute la fin de fin de la mémoire tampon, donc à moins que vous ne l'enlève ou ajoutez une nouvelle ligne dans la chaîne que vous comparez avec les chaînes ne sera jamais égale. p>

    Vous pouvez facilement supprimer la nouvelle ligne de la chaîne d'entrée à l'aide de Strcspn code> fonction: p>

    char terminate[] = "exit";  // The size of the array will be 5, including null-terminator
    


0 commentaires