J'essaie de faire en sorte qu'un programme permette à un utilisateur de saisir un mot ou un caractère, de le mémoriser, puis de l'imprimer jusqu'à ce que l'utilisateur le saisisse à nouveau, en quittant le programme. Mon code ressemble à ceci :
#include <stdio.h>
int main()
{
char input[40];
char check[40];
int i=0;
printf("Hello!\nPlease enter a word or character:\n");
gets(input); /* obsolete function: do not use!! */
printf("I will now repeat this until you type it back to me.\n");
while (check != input)
{
printf("%s\n", input);
gets(check); /* obsolete function: do not use!! */
}
printf("Good bye!");
return 0;
}
Le problème est que je continue à obtenir l'impression de la chaîne d'entrée, même lorsque l'entrée de l'utilisateur (check) correspond à l'original (input). Est-ce que je compare les deux de manière incorrecte ?
17 votes
gets( )
a été supprimé de la norme. Utilisezfgets( )
à la place.1 votes
Notez que cette respuesta à Pourquoi est-ce que
strcmp()
retourne zéro lorsque ses entrées sont égales explique comment comparer des chaînes de caractères pour l'égalité, l'inégalité, moins que, plus que, moins que ou égal, et plus que ou égal. Les comparaisons de chaînes de caractères ne sont pas toutes des comparaisons d'égalité. Les comparaisons sensibles à la casse sont encore différentes ; d'autres comparaisons spéciales (ordre du dictionnaire, par exemple) nécessitent des comparateurs plus spécialisés, et il existe des regex pour des comparaisons encore plus complexes.0 votes
Notez également qu'il y a une question essentiellement dupliquée Comment vérifier si une valeur correspond à une chaîne de caractères ? qui a été posée des années auparavant.
0 votes
Cela répond-il à votre question ? Comment vérifier si une valeur correspond à une chaîne de caractères ?
3 votes
Cette question est bonne, mais l'utilisation de
gets()
est un échec. Elle a également été supprimée de la norme depuis la C11 -> A lire Pourquoi la fonction gets est-elle si dangereuse qu'elle ne doit pas être utilisée ?