C - 读取用户输入
我有一个程序需要用户输入,用户输入数字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语句来尝试输入==“”,输入==“”,并输入==“\ n”,但这些都不似乎工作。任何建议将不胜感激。目前从我可以看到的,最初的if语句失败,代码跳转到else部分,然后打印默认情况。
只是要清楚,我宣布这个代码的变量如下:
char input[2]; //Used to read user input.
int option = 0; //Convert user input to an integer (Used in switch statement).
问题在于如何进行字符串比较(if (input == "\n")
)。 C没有“原生”字符串类型,因此要比较字符串,您需要使用strcmp()
而不是==
。或者,您可以将其与输入的第一个字符进行比较:if (input[0] == '\n') ...
。由于您是在比较char而不是字符串,所以比较不需要函数。
你需要从sscanf
捕获返回代码,它会告诉你有多少场都“分配”,这在“Enter”键的情况下,返回码为0
编辑: 比较字符串时,应该使用strcmp
而不是运算符“==”。
问题是与字符串,你是比较指针,即内存地址。由于输入和"\n"
不完全相同的内存,它总是失败(我假设输入是char *
)。由于您正在寻找单个字符,因此您可以取消引用input
并将其与使用单引号而不是double的char进行比较。
(*input == '\n')
应该按照你的意图工作。
尝试:
输入[0] == '\ n'
(或*输入== '\ n')
你需要使用单引号,而不是双引号
if(input == "\n")
输入地址进行比较字符串“\ n”的地址,
你想要做什么是输入缓冲 的第一个字符用单引号周围比较的字符文字\ n这样
if(input[0] == '\n')
注意“\ n”
尝试:
#include <string.h>
顶部和
if(strcmp(input, "\n") == 0)
如果您的位置if (input == ...)
基本上,你必须在C中使用字符串比较函数,你不能使用比较运算符。
谢谢!每个人的建议似乎都有效,但是这澄清了我什么时候应该使用一个。 – oJM86o 2010-02-25 01:16:02