C语言 - 读取用户输入

5

我有一个程序需要用户输入,用户输入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语句更改为尝试输入=="",输入==" "和输入== "\n",但这些都似乎不起作用。 如果有任何建议,将不胜感激。 目前我所看到的是,最初的if语句失败,代码跳转到else部分,然后打印默认情况。

只是为了清楚起见,我为此代码声明的变量如下:

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

8
问题出在你对字符串的比较上 (if (input == "\n"))。C语言没有“本地”的字符串类型,因此要比较字符串,你需要使用strcmp()而不是==。或者你可以直接比较输入的第一个字符:if (input[0] == '\n') ...。由于这样比较的是字符而不是字符串,所以不需要调用函数来进行比较。

谢谢!大家的建议都很有效,但这个解释了我应该在什么情况下使用其中一个。 - oJM86o

2

尝试:

#include <string.h>

在顶部
if(strcmp(input, "\n") == 0)

如果您想要在原地修改代码,请使用if(input == ...),即不要使用比较运算符。

基本上,在C语言中,您需要使用字符串比较函数,而不能使用比较运算符。


1

你需要使用单引号而不是双引号

if(input == "\n")

将输入地址与字符串"\n"的地址进行比较,

你想要做的是将输入缓冲区的第一个字符与字符字面量\n进行比较,就像这样

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

请注意在 '\n' 周围使用单引号的用法。

1
你需要从sscanf中捕获返回代码,它会告诉你有多少个字段被“分配”,在“Enter”键的情况下,返回代码为0。
编辑: 当比较字符串时,应该使用strcmp而不是运算符“==”。

1
尝试一下:
input[0] == '\n'
(或 *input == '\n')

0
问题出在字符串上,你正在比较指针,即内存地址。由于输入和"\n"不是完全相同的内存,所以它总是失败(我假设输入是一个char *)。既然你要寻找一个单个字符,你可以解引用input,并使用单引号而不是双引号来与char进行比较。
(*input == '\n')

应该按照您的意图工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接