【问题标题】:How to use if statement with characters in C [duplicate]如何在C中使用带有字符的if语句[重复]
【发布时间】:2015-12-03 09:37:43
【问题描述】:

这是我尝试用 C 构建的一个简单计算器的代码(我正在学习 C):

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main()
{
    char Operation;
    printf("Welcome to Double-Figure Calculator!\n\n");
    Sleep(1000);
    printf("What operation would you like to do? (+, -, *, /,) \n");
    Sleep(1000);
    scanf("%c\n\n", Operation);
    Sleep(1000);

    if (Operation == '+'){

        int FirstNumber;
        int SecondNumber;

            printf("Please enter your first number\n");
            scanf("%s\n\n", &FirstNumber);

            printf("Please enter your second number\n");
            scanf("%s\n\n", &SecondNumber);
            Sleep(1000);

            printf("Calculating");

            Sleep(1000);
            printf(".");

            Sleep(1000);
            printf(".");

            Sleep(1000);
            printf(".\n\n");

            printf("Your calculation is %d\n\n", FirstNumber + SecondNumber);

            system("Pause");

    }

    if (Operation == '-'){

        int OneFirstNumber;
        int OneSecondNumber;


        printf("Please enter your first number\n");
        scanf("%s\n\n", &OneFirstNumber);

        printf("Please enter your second number\n");
        scanf("%s\n\n", &OneSecondNumber);
        Sleep(1000);

        printf("Calculating");

        Sleep(1000);
        printf(".");

        Sleep(1000);
        printf(".");

        Sleep(1000);
        printf(".\n\n");

        printf("Your calculation is %d\n\n", OneFirstNumber - OneSecondNumber);

        system("Pause");

    }

    if (Operation == '*'){

        int TwoFirstNumber;
        int TwoSecondNumber;


        printf("Please enter your first number\n");
        scanf("%s\n\n", &TwoFirstNumber);

        printf("Please enter your second number\n");
        scanf("%s\n\n", &TwoSecondNumber);
        Sleep(1000);

        printf("Calculating");

        Sleep(1000);
        printf(".");

        Sleep(1000);
        printf(".");

        Sleep(1000);
        printf(".\n\n");

        printf("Your calculation is %d\n\n", TwoFirstNumber * TwoSecondNumber);

        system("Pause");

    }

    if (Operation == '/'){

        int ThreeFirstNumber;
        int ThreeSecondNumber;


        printf("Please enter your first number\n");
        scanf("%s\n\n", &ThreeFirstNumber);

        printf("Please enter your second number\n");
        scanf("%s\n\n", &ThreeSecondNumber);
        Sleep(1000);

        printf("Calculating");

        Sleep(1000);
        printf(".");

        Sleep(1000);
        printf(".");

        Sleep(1000);
        printf(".\n\n");

        printf("Your calculation is %d\n\n", ThreeFirstNumber / ThreeSecondNumber);

        system("Pause");

    }

    system("pause");
    return 0;

}

问题是每当我运行代码并输入一个操作时,例如 +、-、* 或 /,然后按 Enter,即使我有 if 语句来执行程序的其余部分,也没有任何反应.我无法弄清楚我在这里做错了什么。有什么帮助吗? (对不起,我是编程新手,并且正处于学习 C 的早期阶段)。

【问题讨论】:

  • 问题可能与scanf有关。
  • 我确实检查了代码,我认为它是正确的。你怎么看?
  • 如果您认为代码正确,您的问题是什么?
  • 您正在为scanf 使用%s "string" 格式说明符。
  • 我的问题是为什么我输入一个操作后什么都没有发生,即使我有一系列的 if 语句。

标签: c if-statement char calculator


【解决方案1】:

您的代码中有一些错误可以改进。

第一个,使用scanf的时候,必须传递变量地址来存储数据,例如:

scanf("%c", &Operation);

避免在 scanf 中使用“\n\n”,它告诉您期望一个字符和两个用户输入的返回值。如果用户不这样做,您的代码将无法正常工作。

我注意到你在大多数情况下都使用了错误的 scanf 数据类型。如果你想用scanf从用户那里得到一个整数值,你必须使用相应的转换%d来得到一个整数值,例如:

scanf("%d\n", &secondNumber);

当您使用 %s 时,您是在告诉您期望用户输入的字符串,如果您将字符串存储到整数变量中,它可能会使您的代码崩溃。

还有一点和使用if语句切换用户输入有关,最好使用switch-case语句,例如:

switch(operation) {
case '+':
    // do add operation
    break;
case '-': 
    // do sub operation
    break;
default:
    // return some error message.
}

在 switch-case 语句中,“默认”是一个例程,如果没有一个 case 不符合您的预期。

我认为这就是使代码正常工作所需要做的一切。

【讨论】:

  • 感谢您的回复,我将进行更改,看看是否有效。
  • 刚刚修复/你是对的,即使在 scanf("%d\n", &FirstNumber);让计算机期望两个用户输入,所以输入两次,每次都按回车。我所做的只是拿走\n,问题就解决了!非常感谢,感谢其他所有人的投入。今天学到了新东西!
【解决方案2】:
scanf("%c\n\n", &Operation);

要扫描到值,你需要给scanf一个地址。

【讨论】:

  • 即使在“操作”前加上“&”后,输入操作后也没有任何反应。
  • 我认为 \n\n 也打破了这一点
猜你喜欢
  • 2014-03-02
  • 2019-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-23
  • 1970-01-01
相关资源
最近更新 更多