当我输入“正弦”时,C计算器程序一直出错?

时间:2013-03-19 01:45:43

标签: c

嗨,我是编程新手,现在已经在计算器上工作了一段时间。我试图添加一些触发功能,我正在遇到麻烦。其他函数工作(+, - ,*,/),但是当我输入“sine”时,它跳到代码的一部分,它说它是一个不正确的函数。请帮我解决我的代码。谢谢!

#include <stdio.h>
#include <math.h>


int main() 
{

    float firstnum, secondnum, angle, answer, pi;
    char function, sine;


    pi = atan(1.0)*4;


    printf("\nHello and welcome to my calculator!\n");

    while(1) 
    {      

        printf("\nPlease input the function you would like to use.  These include +, -, *, /, sine.\n");     
        scanf("%s", &function);   



        switch(function)
        {
            case '+': 
            printf("\nNow please input the two variables.\n");  
            scanf("%f", &firstnum);
            scanf("%f", &secondnum);
            answer = firstnum+secondnum;
            break;

            case '-': 
            printf("\nNow please input the two variables.\n");  
            scanf("%f", &firstnum);
            scanf("%f", &secondnum);
            answer = firstnum-secondnum;
            break;

            case '*': 
            printf("\nNow please input the two variables.\n");  
            scanf("%f", &firstnum);
            scanf("%f", &secondnum);
            answer = firstnum*secondnum;
            break;

            case '/': 
            printf("\nNow please input the two variables.\n");  
            scanf("%f", &firstnum);
            scanf("%f", &secondnum);
            answer = firstnum/secondnum;
            break;

            case 'sine':
            printf("\nPlease enter the angle.\n");
            scanf("%f", &angle);
            answer = sin(angle);
            break;



            default: printf("Sorry, that is an incorrect function.  The only available choices are +, -, *, /, sine.");
            break;
        }   

        printf("Your answer is %f \n", answer);  
        printf("\nWhen you are ready to quit, simply press Ctrl + C or just hit the X button in the top right.\n");
    } 

     return 0;
}

2 个答案:

答案 0 :(得分:6)

'sine'

这是一个多字符文字。 function是一个字符。在switch语句中检查它的整数值。您可能永远无法使用与您尝试这样做的方式匹配sine的用户使用单个字符。请改为读取字符串(char*)。

来自标准:

  

C99 6.4.4.4p10:&#34;包含多个字符(例如,&#39; ab&#39;)的整数字符常量的值,或包含未映射到的字符或转义序列的值单字节执行字符,是实现定义的。&#34;

答案 1 :(得分:0)

C没有第一类字符串类型。这意味着您不能对字符串使用switch语句,您需要使用strlcmp等函数进行字符串比较。

根据您的目标(制作计算器或学习C),切换到具有较高抽象级别的其他语言或从较好的C教科书中的较低级别练习开始可能是明智的。

另外,请注意在C中正确使用字符串和用户输入,没有安全漏洞,比起初看起来要困难得多。如果你的目标是学习一门语言,那么学习C ++是一个更好的选择,你需要std::string来处理你的比较,iostreams来处理你的输入和输出。