2010-02-25 12 views
5

Tengo un programa donde se requiere la entrada del usuario, un usuario escribe un número 1-8 para determinar cómo ordenar algunos datos, pero si el usuario acaba de ingresar, se realiza una función diferente. Tengo la idea general de cómo hacer esto y pensé que lo que tenía funcionaría bien, pero tengo algunos problemas cuando el usuario simplemente pulsa la tecla Intro. Actualmente mi código es el siguiente:C - Lectura de entrada de usuario

//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; 
    } 
} 

Ahora he cambiado la entrada if para tratar == "", de entrada == "", y la entrada == "\ n", pero ninguna de ellas parece trabajo. Cualquier consejo sería muy apreciado. Actualmente, por lo que puedo ver, la sentencia if inicial falla y el código salta a la parte else y luego imprime el caso predeterminado.

Para que quede claro las variables que declarado para este código son los siguientes:

char input[2];   //Used to read user input. 
int option = 0;   //Convert user input to an integer (Used in switch statement). 

Respuesta

8

El problema está en cómo está haciendo la comparación de cadenas (if (input == "\n")). C no tiene un tipo de cadena "nativo", por lo que para comparar cadenas, debe usar strcmp() en lugar de ==. Alternativamente, puede comparar con el primer carácter de la entrada: if (input[0] == '\n') .... Como entonces está comparando los caracteres en lugar de las cadenas, la comparación no requiere una función.

+0

Gracias! Las sugerencias de todos parecen funcionar, pero esto aclara cuándo debo usar una sobre la otra. – oJM86o

1

Es necesario capturar código de retorno de sscanf, que le dirá cuántos del campo son "asignados", el cual en caso de la tecla "Enter", código de retorno de 0

editar: debe usar strcmp al comparar cadenas, no el operador "==".

0

El problema es con cadenas, está comparando punteros, es decir, direcciones de memoria. Como la entrada y "\n" no son la misma memoria exacta, siempre falla (supongo que la entrada es char *). Como busca un solo personaje, puede eliminar la referencia input y compararla con un carácter de caracteres utilizando comillas simples en lugar de dobles.

(*input == '\n') 

Debe funcionar como lo desea.

1

Probar:

introducir [0] == '\ n'

(o de entrada * == '\ n')

1

Es necesario utilizar comillas simples en lugar de comillas dobles

if(input == "\n") 

compara la dirección de entrada a la dirección de la cadena "\ n",

lo que quiere hacer es comparar el primer carácter de la memoria intermedia de entrada al carácter literal \ n como esta

if(input[0] == '\n') 

Nota el uso de comillas simples '\ n'

2

Probar:

#include <string.h> 

en la parte superior y

if(strcmp(input, "\n") == 0) 

en su lugar si su if (input == ...)

Básicamente, debe usar funciones de comparación de cadenas en C, no puede usar operadores de comparación.