繁体   English   中英

C - 读取用户输入

[英]C - Reading user input

我有一个需要用户输入的程序,用户输入数字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).  

问题在于你如何进行字符串比较( if (input == "\\n") )。 C没有“本机”字符串类型,因此要比较字符串,您需要使用strcmp()而不是== 或者,您可以只比较输入的第一个字符: if (input[0] == '\\n') ... 由于您正在比较char而不是字符串,因此比较不需要函数。

尝试:

#include <string.h>

在顶部和

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

如果您的if ( input == ... )到位

基本上,你必须在C中使用字符串比较函数,你不能使用比较运算符。

你需要从sscanf捕获返回代码,它会告诉你有多少字段是“已分配”的,在“输入”键的情况下,返回代码为0

编辑:比较字符串时应使用strcmp ,而不是运算符“==”。

尝试:

输入[0] =='\\ n'

(或*输入=='\\ n')

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

if(input == "\n")

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

你想要做的是比较输入缓冲区的第一个字符和字符文字\\ n像这样

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

注意在'\\ n'周围使用单引号

问题在于字符串,你在比较指针,即内存地址。 由于输入和"\\n"不是完全相同的内存,因此总是失败(我假设输入是char * )。 由于您正在寻找单个字符,因此您可以使用单引号而不是double来取消引用input并与char进行比较。

(*input == '\n')

应该按你的意愿工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM