C - Чтение ввода данных пользователем

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

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

Теперь я изменился, если оператор для попытки входа =="", вход == "", и ввел == "\n", но ни один из них, кажется, не работает. Любой совет значительно ценился бы. В настоящее время от того, что я вижу, начальная буква, если сбои оператора и переходы кода к еще части и затем печатает случай по умолчанию.

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

char input[2];          //Used to read user input.
int option = 0;         //Convert user input to an integer (Used in switch statement).  
5
задан oJM86o 25 February 2010 в 00:56
поделиться

6 ответов

Можно получить доступ либо к свойству BaseObject в PSObject (который выполняет обход каждого PSObject, пока не попадет в фактический базовый объект), либо к свойству ImmedityBaseObject , которое просто захватывает следующий объект в цепочке.

-121--2843348-

Вы должны захватить код возврата из sscanf , он сообщит вам, сколько полей "назначено", который в ключевом случае "Enter", код возврата 0

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

-121--4690578-

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

8
ответ дан 18 December 2019 в 14:45
поделиться

Попробуйте:

input [0] == '\ n'

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

1
ответ дан 18 December 2019 в 14:45
поделиться

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

if(input == "\n")

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

Что вы хотите do заключается в сравнении первого символа входного буфера с символьным литералом \ n, как это

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

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

1
ответ дан 18 December 2019 в 14:45
поделиться

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

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

1
ответ дан 18 December 2019 в 14:45
поделиться

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

(*input == '\n')

Должно работать так, как вы задумали.

0
ответ дан 18 December 2019 в 14:45
поделиться

Попробуйте:

#include <string.h>

вверху и

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

на месте вашего if ( input == ... )

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

2
ответ дан 18 December 2019 в 14:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: