C - Чтение ввода пользователя - PullRequest
5 голосов
/ 25 февраля 2010

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

//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, чтобы попробовать input == "", input == "" и input == "\ n", но, похоже, ничего из этого не работает. Любой совет будет принята с благодарностью. В настоящее время из того, что я вижу, исходный оператор if не выполняется, и код переходит к другой части, а затем печатает регистр по умолчанию.

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

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

Ответы [ 6 ]

8 голосов
/ 25 февраля 2010

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

2 голосов
/ 25 февраля 2010

Попробуйте:

#include <string.h>

вверху и

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

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

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

1 голос
/ 25 февраля 2010

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

if(input == "\n")

сравнивает входной адрес с адресом строки "\ n",

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

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

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

1 голос
/ 25 февраля 2010

Попробуйте:

input [0] == '\ n'

(или * input == '\ n')

1 голос
/ 25 февраля 2010

Вам необходимо захватить код возврата из sscanf, он сообщит вам, сколько полей «назначено», что в случае с клавишей «Enter» возвращает код 0

редактировать: при сравнении строк следует использовать strcmp, а не оператор "==".

0 голосов
/ 25 февраля 2010

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

(*input == '\n')

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...