返回值被忽略:'scanf'关闭

问题描述

我正在用C编写程序,这是我的功能之一:

void group3()
{
    char select[5];
    printf("\nDetails etc.");
    printf("\nPlease confirm Yes/No if you would like to subscribe:");
    scanf("%s",select);
    if (select == "Yes")
        printf("Good.");
    else
    {
        printf("Alright.");
        main();
    }
}

但是,当我尝试编译和调试程序时,会出现一个警告,即“忽略返回值:'scanf'”。我注意到当我也为整数运行scanf时会出现警告,但该程序仍适用于整数。但是,当我尝试扫描字符串时,它不起作用。我尝试使用getchar(),但对getchar()也会发生相同的警告。我也尝试过使用scanf_s,但是当我尝试对字符串进行scanf_s时也会出现相同的问题。我还在程序中定义了_CRT_SECURE_NO_WARNINGS。如果有人可以向我解释如何消除这种警告/使scanf或getchar与字符串一起使用,我将不胜感激。

编辑:感谢一些乐于助人的用户,我发现问题不是因为未读取字符串,而是因为我无法使用if语句比较字符串。答案在评论部分,我无法选择它作为对此的正确答案,但此问题已关闭。谢谢:)

解决方法

问题在于scanf()的返回值被忽略,因此不要忽略该值以消除警告。

scanf()返回成功读取的数据数,错误返回负数,因此检查是否成功读取必需的数据很有用。

示例:

    if (scanf("%4s",select) != 1) {
        fputs("read error\n",stderr);
        exit(1);
    }

另外,最好读取要读取的长度,以避免缓冲区溢出。 在上面的示例中也是如此。

还有一点是,select == "Yes"不是比较C语言中字符串的正确方法。 这是在比较指针,因为数组和字符串文字存储在内存中的不同位置,所以它不是真的。 string.h中的strcmp()函数对比较字符串很有用。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...