4

嗨,我是编程新手,并且已经在计算器上工作了一段时间。我正在尝试添加一些三角函数,但我遇到了正弦问题。其他函数可以工作(+、-、*、/),但是当我输入“正弦”时,它会跳到代码中它说它是一个不正确的函数的部分。请帮助我的代码。谢谢!

#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;
}
4

2 回答 2

6
'sine'

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

从标准:

C99 6.4.4.4p10:“包含多个字符(例如,'ab')或包含不映射到单字节执行字符的字符或转义序列的整数字符常量的值是实现定义的。”

于 2013-03-19T01:49:31.293 回答
0

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

根据您的目标(制作计算器或学习 C),明智的做法是切换到具有更高抽象级别的不同语言,或者从一本好的 C 教科书中的较低级别练习开始。

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

于 2013-03-19T01:56:14.320 回答