问题描述
我正在用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()
函数对比较字符串很有用。