如何修复if语句错误和“未指定字符串文字的比较结果”?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何修复if语句错误和“未指定字符串文字的比较结果”?相关的知识,希望对你有一定的参考价值。

所以,我刚刚开始(原谅我的noob-ness),我正在使用Xcode在Mac上进行C程序。它基本上只是一个scanf(),然后是大量的if语句产生一个预定的输出。我写了它,以便Xcode编译它没有婊子,但我得到一个奇怪的“修复它”错误,当我尝试运行时没有输出。

char planet[9];

printf("Input the name of a planet
");

 scanf("%c", &planet);

if (planet == "Earth")
    {printf("Earth is 150 million kilometers away from the sun");}

if (planet == "Mars") 
    {printf("Mars is 220 million kilometers away from the sun");} 

if (planet == ("Mercury"))
{printf("Mercury is 57 million kilometers from the sun");}

if (planet == ("Venus"))
    {printf("Venus is 108 million kilometers from the sun");}

if (planet == ("Jupiter"))
    {printf("Jupiter is 779 million kilometers from the sun");}

if (planet == ("Saturn"))
    {printf("Saturn is 1.73 billion kilometers from the sun");}

if (planet == ("Uranus"))
    {printf ("Uranus (haha) is 2.88 billion kilometers from the sun");} 

if (planet == ("Neptune"))
    {printf("Neptune is 4.5 billion kilometers from the sun");}

    return 0;

是代码本身,但我不能让它工作。

这里也是Xcode项目的链接。

https://www.facebook.com/photo.php?fbid=252616984794310&set=a.106237419432268.11635.100001380326478&type=1&theater

答案

planet的地址永远不会等于任何字符串文字的地址。您需要使用strcmp来比较字符串的内容,而不是比较它们的地址。

另一答案

使用strcmp你会更开心:

if (strcmp(planet, "Earth") == 0) {
    ...
}

此外,%c扫描一个字符,而不是字符串。您需要使用%s来扫描字符串。并且您需要指定最大长度以避免溢出缓冲区:

scanf("%8s", planet);

最大长度比缓冲区大小小1,因为您必须为NUL终结符留出空间。

另一答案

您正在将行星的地址与这些字符串文字的地址进行比较。因此地址将不相同。您应该比较两个字符串的内容,如下所示:

首先包括<string.h>,并在每个if语句中写这样的

if(!strcmp ( planet,"Earth" ))

由于无法直接比较c字符串,因此需要使用strcmp函数。

strcmp功能

int strcmp ( const char * str1, const char * str2 );

这个函数比较两个字符串和返回值将是:

a)零值表示两个字符串相等。

b)大于零的值表示不匹配的第一个字符在str1中的值大于在str2中的值;和

c)小于零的值表示相反。

以上是关于如何修复if语句错误和“未指定字符串文字的比较结果”?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复“调试错误!,变量'x'周围的堆栈已损坏”?

如何修复此 SELECT 语句中的错误 INTO 子句

更新:如何修复过程语句中的 SQL 错误:新错误 [重复]

如何修复此“忽略 SQL 语句”错误?

如何修复“函数声明了一个不透明的返回类型,但在其主体中没有返回语句来推断基础类型”错误?

另一个if [重复]中的PHP未定义索引