C - la Lecture de la saisie de l'utilisateur
J'ai un programme où la saisie de l'utilisateur est nécessaire, l'utilisateur tape un nombre de 1 à 8 pour déterminer comment trier des données, mais si l'utilisateur frappe juste entrer dans une autre fonction est exécutée. J'ai l'idée générale de la façon de le faire et j'ai pensé que ce que j'avais pourrait fonctionner très bien, mais je vais avoir quelques problèmes quand il s'agit lorsque l'utilisateur appuie sur la touche entrée. Actuellement mon code se présente comme suit:
//User input needed for sorting.
fputs("Enter an option (1-8 or Return): ", stdout);
fflush(stdout);
fgets(input, sizeof input, stdin);
printf("%s entered\n", input); //DEBUGGING PURPOSES
//If no option was entered:
if(input == "\n")
{
printf("Performing alternate function.");
}
//An option was entered.
else
{
//Convert input string to an integer value to compare in switch statment.
sscanf(input, "%d", &option);
//Determine how data will be sorted based on option entered.
switch(option)
{
case 1:
printf("Option 1.\n");
break;
case 2:
printf("Option 2.\n");
break;
case 3:
printf("Option 3.\n");
break;
case 4:
printf("Option 4.\n");
break;
case 5:
printf("Option 5.\n");
break;
case 6:
printf("Option 6.\n");
break;
case 7:
printf("Option 7.\n");
break;
case 8:
printf("Option 8.\n");
break;
default:
printf("Error! Invalid option selected!\n");
break;
}
}
Maintenant, j'ai changé l'instruction if pour tenter d'entrée == "", entrée == " ", et l'entrée == "\n" mais aucune ne semble fonctionner. Tout conseil serait grandement apprécié. Actuellement, de ce que je peux voir, la première instruction if échoue et le code de sauts à l'autre partie, puis imprime le cas par défaut.
Juste pour être clair, les variables, j'ai déclaré pour ce code sont les suivants:
char input[2]; //Used to read user input.
int option = 0; //Convert user input to an integer (Used in switch statement).
Vous devez vous connecter pour publier un commentaire.
Le problème est dans la façon dont vous êtes en train de faire la comparaison de chaînes de caractères (
if (input == "\n")
). C n'est pas un "natif" de type chaîne de caractères, donc pour comparer des chaînes, vous devez utiliserstrcmp()
au lieu de==
. Alternativement, vous pouvez simplement comparer le premier caractère de l'entrée:if (input[0] == '\n') ...
. Puisque vous êtes en comparant char au lieu de chaînes de caractères, la comparaison ne nécessite pas une fonction.Essayer:
en haut et
en place si votre
if ( input == ... )
Fondamentalement, vous devez utiliser des chaînes de caractères comparaison des fonctions en C, vous ne pouvez pas utiliser les opérateurs de comparaison.
Essayer:
d'entrée[0] == '\n'
(ou d'entrée * = = '\n')
Vous avez besoin d'utiliser les guillemets simples plutôt que des guillemets
compare la saisie de l'adresse de la chaîne "\n",
Ce que vous voulez faire est de comparer le premier caractère de la mémoire tampon d'entrée
le caractère littéral \n comme cette
Notez l'utilisation de guillemets simples autour de '\n'
Vous avez besoin pour capturer le code de retour de
sscanf
, il vous dira combien de champ sont "assignés", qui en touche "Entrée" cas, le code de retour 0edit:
vous devez utiliser
strcmp
lors de la comparaison de chaîne de caractères, l'opérateur "==".Le problème est avec des chaînes, vous de la comparaison de pointeurs, c'est à dire des adresses de mémoire. Depuis l'entrée et
"\n"
ne sont pas exactement la même mémoire, il échoue toujours (je suppose que l'entrée est unchar *
). Puisque vous êtes à la recherche d'un seul caractère, vous pouvez au lieu de déréférencementinput
et de les comparer à un char d'utiliser des guillemets simples au lieu du double.Devrait fonctionner comme vous le souhaitez.