这是我的C程序代码。在此应用程序中,我提示用户从屏幕上的列表中选择任何计算机型号。如果用户选择戴尔然后提示bluh bluh bluh,如果用户选择任何其他模型,则执行bluh bluh。那么情况是在编译之后,当我运行应用程序时,它不会以我想要的方式响应。在if
条件之后,else if
条件不成立,else
和if
不会被执行。我也使用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!");
}
}
}
答案 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
执行。