У меня есть программа, где ввод данных пользователем требуется, пользователь вводит в номере 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).
Можно получить доступ либо к свойству BaseObject
в PSObject
(который выполняет обход каждого PSObject, пока не попадет в фактический базовый объект), либо к свойству ImmedityBaseObject
, которое просто захватывает следующий объект в цепочке.
Вы должны захватить код возврата из sscanf
, он сообщит вам, сколько полей "назначено", который в ключевом случае "Enter", код возврата 0
изменить:
при сравнении строк следует использовать strcmp
, а не оператор "= =".
Проблема заключается в том, как выполняется сравнение строк ( if (input = "\n ")
). C не имеет "собственного" строкового типа, поэтому для сравнения строк необходимо использовать strcmp ()
вместо = =
. Кроме того, можно просто сравнить с первым символом ввода: , если (input [0] = = '\n ')...
. Поскольку вы сравниваете символы вместо строк, сравнение не требует функции.
Попробуйте:
input [0] == '\ n'
(или * input == '\ n')
Вам нужно использовать одинарные кавычки, а не двойные кавычки
if(input == "\n")
сравнивает входной адрес с адресом строки "\ n",
Что вы хотите do заключается в сравнении первого символа входного буфера с символьным литералом \ n, как это
if(input[0] == '\n')
Обратите внимание на использование одинарных кавычек вокруг '\ n'
Вам нужно перехватить код возврата из sscanf
, он скажет вам, сколько полей "назначено", что в случае клавиши "Enter", код возврата 0
edit:
при сравнении строк следует использовать strcmp
, а не оператор "==".
Проблема в том, что со строками вы сравниваете указатели, т.е. адреса памяти. Поскольку входные данные и "\n"
не являются одной и той же памятью, это всегда приводит к неудаче (я предполагаю, что входные данные - это char *
). Поскольку вы ищете один символ, вы можете вместо этого разыменовать input
и сравнить с char, используя одинарные кавычки вместо двойных.
(*input == '\n')
Должно работать так, как вы задумали.
Попробуйте:
#include <string.h>
вверху и
if(strcmp(input, "\n") == 0)
на месте вашего if ( input == ... )
В принципе, в C нужно использовать функции сравнения строк, нельзя использовать операторы сравнения.