4

こんにちは、私はプログラミングが初めてで、しばらくの間電卓に取り組んでいます。いくつかの三角関数を追加しようとしていますが、サインに問題があります。他の関数 (+、-、​​、/) は機能しますが、「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;
}
4

2 に答える 2

6
'sine'

That is a multi-character literal. function is a single character. It's integral value is checked in the switch statement. You will likely never be able to consume a single character from the user which matches sine in the way that you are attempting to do so. Read a string (a char*) instead.

From the standard:

C99 6.4.4.4p10: "The value of an integer character constant containing more than one character (e.g., 'ab'), or containing a character or escape sequence that does not map to a single-byte execution character, is implementation-defined."

于 2013-03-19T01:49:31.293 に答える
0

C には、ファースト クラスの文字列型はありません。これは、文字列に対して switch ステートメントを使用できないことを意味します。文字列比較には strlcmp などの関数を使用する必要があります。

目的 (電卓を作成するか、C を学習するか) に応じて、抽象化レベルの高い別の言語に切り替えるか、優れた C テキストから低レベルの演習を開始することをお勧めします。

また、C で文字列とユーザー入力を正しく処理すること、つまりセキュリティ ホールがないことは、最初に思われるよりもはるかに難しいことに注意してください。std::stringあなたの目的が言語を学ぶことである場合、比較iostreamsを処理し、入力と出力を処理する必要がある場合は、おそらく C++ を学習する方が良いでしょう。

于 2013-03-19T01:56:14.320 に答える