0

我正在编写一个 C 程序,它要求用户提供各种输入,一个是“是”或“否”问题。如果输入 Y 或 y,则应该执行 If 语句。但是,无论您输入什么内容,都会通过 If 语句。

double phonePrice;
double phoneTax;
double phoneTotal;
double phoneApplePrice;
double phoneSubtotal;
double temp;
int yearsAppleCare;
char userAnswer;

//prompting for price
printf("Enter the price of the phone> ");
scanf("%f", &phonePrice);
fflush(stdin);

//prompting for iphone
printf("Is the phone an iPhone (Y/N) ?> ");
scanf("%c", &userAnswer);
fflush(stdin);

//nested if statements asking for apple care amount
if(userAnswer=="Y"||"y")
{
    printf("Enter the number of years of AppleCare> ");
    scanf("%d", &yearsAppleCare);
    
    if(yearsAppleCare<=0)
    {
        printf("You must choose at least 1 year of AppleCare");
        return 0;
    }
}

对此的任何帮助将不胜感激。

4

2 回答 2

1

对于初学者来说,这个电话

fflush(stdin);

具有未定义的行为。去掉它。

而不是这个电话

scanf("%c", &userAnswer);

利用

scanf(" %c", &userAnswer);
      ^^^^

跳过输入缓冲区中的空格,例如换行符'\n'

同样对于双变量使用转换说明符%lf。例如

scanf("%lf", &phonePrice);

if 语句中的条件

if(userAnswer=="Y"||"y")

相当于

if( ( userAnswer=="Y" ) || ( "y" ) )

由于隐式转换为指向其第一个元素的指针的字符串文字“y”不等于空指针,因此条件始终评估为逻辑真。

你需要写

if( userAnswer == 'Y' || userAnswer == 'y' )

使用整数字符常量'Y''y'不是字符串文字。

于 2021-10-03T18:12:16.160 回答
-2

错误在这里:

//nested if statements asking for apple care amount
if(userAnswer=="Y"||"y")
{

应该:

//nested if statements asking for apple care amount
if(userAnswer == "Y" || userAnswer == "y")
{

等待!不!

应该:

//nested if statements asking for apple care amount
if( strcmp(userAnswer, "Y") == 0 || strcmp(userAnswer, "y") == 0)
{

为什么?

是什么==意思?

C语言中,==意味着两个对象相等。在字符串的情况下,对象是char*,即指向 的指针char当且仅当内存地址相同时,它们才会相等。在这种情况下,情况并非如此。

为什么?因为一个字符串被编译到程序中并在程序启动时初始化,而另一个字符串由用户提供到临时内存中。这些将位于不同的地址,因此指针将不相同。

您可能想要的是比较两个指针指向的内存位置的内容。

为此目的,strcmp提供了该功能。如果字符串相同,则此函数返回零。您可能还需要考虑stricmp

于 2021-10-03T18:05:21.057 回答