我试图在c中运行一段代码,但它没有按照我期望/想要的方式执行

时间:2015-06-27 06:42:40

标签: c cs50

这是我的C程序代码。在此应用程序中,我提示用户从屏幕上的列表中选择任何计算机型号。如果用户选择戴尔然后提示bluh bluh bluh,如果用户选择任何其他模型,则执行bluh bluh。那么情况是在编译之后,当我运行应用程序时,它不会以我想要的方式响应。在if条件之后,else if条件不成立,elseif不会被执行。我也使用cs50库从用户获取字符串,我也可以从scanf。

这是代码。

#include <stdio.h>
#include "cs50.h"

int main (void)
{
    char first_Pc[] = "Dell"; 
    char second_Pc[] = "Intel";
    char third_Pc[] = "Max";

    {
        printf("Please Specify your choice. \n");
        printf("We have Dell, Intel And Max computers:\n");

        string userChoice = GetString();

            if ("userChoice == first_Pc", &first_Pc)
            {
                printf("Nice Choice! Your Dell worths $100.");
            }
            else if ("userChoice == second_Pc", &second_Pc)
            {
                printf("You prefer Intel computers! They are smart. You have to pay $150.");
            }
            else if ("userChoice == third_Pc", &third_Pc)
            {
                printf("Max computers are really superfast! They worth $200");
            }
            else 
            {
                printf("You didn't choose any from our stored models!");
            }
    }
}

1 个答案:

答案 0 :(得分:4)

您无法使用==比较字符串(您可以,但实际上它会比较指针而不是实际内容)。但是你的比较尝试看起来很尴尬。使用strcmp中的string.h如果两个参数的内容相同,则返回0。

所以改变

if ("userChoice == first_Pc", &first_Pc)
else if ("userChoice == second_Pc", &second_Pc)
else if ("userChoice == third_Pc", &third_Pc)

if (strcmp(userChoice, first_Pc) == 0)
else if (strcmp(userChoice, second_Pc) == 0)
else if (strcmp(userChoice, third_Pc) == 0)

并且不要忘记#include <string.h>

以下是您正在做的事情的解释。

下面:

if ("userChoice == first_Pc", &first_Pc)

有一些条件和if。你知道if做了什么,所以让我们跳过那一部分。这里的条件是"userChoice == first_Pc", &first_Pc。第一部分是字符串文字"..."(其中的内容无关紧要),第二部分是first_Pc的地址,char(*)[5],由{{3}分隔}。

逗号运算符计算其左操作数并返回右侧。在这种情况下,将对字符串文字进行求值和丢弃,并返回first_Pc的地址。由于它不是NULL,因此条件变为真,if执行。