2010-02-25 9 views
5

У меня есть программа, в которой требуется пользовательский ввод, пользователь вводит число в 1-8, чтобы определить, как сортировать некоторые данные, но если пользователь просто нажимает, вводится другая функция. Я получаю общее представление о том, как это сделать, и я подумал, что у меня все будет нормально, но у меня возникают некоторые проблемы, когда пользователь просто нажимает клавишу ввода. В настоящее время мой код выглядит следующим образом:C - Чтение пользовательского ввода

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

Теперь я изменил вход, если заявление, чтобы попытаться == «», ввод == «» и введите == «\ п», но ни один из них не кажется, Работа. Любые советы будут очень признательны. В настоящее время из того, что я вижу, исходный оператор if завершается с ошибкой, и код переходит к части else, а затем печатает случай по умолчанию.

Просто чтобы быть ясно переменные I, объявленные в этом коде следующим образом:

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

ответ

8

Проблема в том, как вы выполняете сравнение строк (if (input == "\n")). C не имеет «родной» тип строки, поэтому для сравнения строк вам нужно использовать strcmp() вместо ==. Кроме того, вы можете просто сравнить с первым символом ввода: if (input[0] == '\n') .... Поскольку вы сравниваете символ вместо строк, сравнение не требует функции.

+0

Спасибо! Кажется, что все предложения работают, но это разъясняет, когда я должен использовать один над другим. – oJM86o

1

Вам нужно захватить код возврата sscanf, он расскажет вам, как многие из поля «назначен», который в поле «Enter», код возврата 0

Редактировать: вы должны использовать strcmp при сравнении строки, а не оператора «==».

0

Проблема со строками, вы сравниваете указатели, то есть адреса памяти. Поскольку входной сигнал и "\n" - это не точная память, он всегда терпит неудачу (я предполагаю, что вход char *). Так как вы ищете один символ, вы можете вместо этого разыскать input и сравнить с символом, используя одинарные кавычки вместо двойного.

(*input == '\n') 

Должно работать так, как вы планируете.

1

Try:

вход [0] == '\ п'

(или * ввод == '\ п')

1

Вы должны использовать одиночные кавычки, а не двойные кавычки

if(input == "\n") 

сравнивает входной адрес на адрес строки «\ п»,

Что вы хотите сделать это сравнить первый символ входного буфера к литерой \ п как этот

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

Обратите внимание на использование одиночных кавычек вокруг «\ п»

2

Try:

#include <string.h> 

наверху и

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

на месте, если ваш if (input == ...)

В принципе, вы должны использовать функции сравнения строк в C, вы не можете использовать операторы сравнения.

Смежные вопросы