忽略返回值:“scanf”(已关闭)

忽略返回值:“scanf”(已关闭),c,scanf,warnings,compiler-warnings,getchar,C,Scanf,Warnings,Compiler Warnings,Getchar,我正在用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")

我正在用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();
    }
}
但是当我试图编译和调试程序时,出现了一个名为returnvalueignored的警告:“scanf”。我注意到当我对整数运行scanf时也会出现警告,但该程序对整数仍然有效。然而,当我尝试扫描字符串时,它不起作用。我尝试过使用getchar,但getchar也出现了同样的警告。我也尝试过使用scanf_s,但是当我尝试使用scanf_s搜索字符串时,同样的问题也出现了。我还在程序中定义了“CRT安全”和“无”警告。如果有人能向我解释如何避免出现此警告/让scanf或getchar处理字符串,我将不胜感激


编辑:多亏了一些有帮助的用户,我发现问题并不是因为没有读取字符串,而是因为我无法用if语句以这种方式比较字符串。答案在评论部分,我不能选择它作为这个问题的正确答案,但这个问题已经结束。谢谢:

问题是忽略了scanf的返回值,所以不要忽略该值以消除警告

scanf在成功时返回读取数据的数量,在错误时返回负数,因此检查它是否成功读取所需内容非常有用

例如:

    if (scanf("%4s", select) != 1) {
        fputs("read error\n", stderr);
        exit(1);
    }
另外,读取要读取的长度也很好,以避免缓冲区溢出。 在上面的示例中也会这样做

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

因此,您真的想在函数中调用main吗?@user3121023谢谢您的建议:然而,我仍然在寻找一个解决方案,来解释为什么scanf没有读取这里的字符串,因为如果scanf没有读取字符串,我仍然无法使用if语句it@user3121023哦,好吧,我试过了,现在我明白你的意思了!这是我的错,对不起,还有泰姆!!我非常感激,祝你今天愉快Dmay也可以在您的回答中对main的调用进行注释吗?@bruno在C中允许递归调用main。从这段代码来看,我不能说这是错误的。至少这是可疑的-对不起,我对C有点陌生,所以我不确定你的意思,但我试着用我的程序运行上面的代码,没有错误消息,也没有出现负数。。。如何修复scanf未能成功读取字符串的错误?@cmy在当前情况下,如果您在调用之前到达文件末尾,scanf将不会成功,只有您可以决定在这种情况下如何操作-