0

switch ステートメントでシフト演算子を実装しようとしていますが、出力の取得に問題があります。'12 << 2: 48' を返す必要がある '12 << 2' のような単純な左シフトを実行しようとすると、コードが次のようになります。

#include <stdio.h>

void shift(){
    char op = 0;
    int x = 0;
    int y = 0;
    char buffer[1024];
    int iCont = -1;
    char c1 = 0;
    char c2 = 0;

    do
    {
        printf("\ninput: ");
        fgets(buffer, sizeof(buffer), stdin);
        if (sscanf(buffer, "%d %c%c %d", &x, &c1, &c2, &y)){}
            switch (op)
            {
            case '<<': printf("%d %c1%c %d = %d", x, c1, c2, y, x << y);
                break;
            case '>>': printf("%d %c1%c %d = %d", x, c1, c2, y, x >> y);
            default:
                break;
            }
        } while (iCont);

}
4

3 に答える 3

2

コードopには値が含まれています0。0 以外の値が割り当てられていない値 op をオンにしています。

また、一重引用符は文字用です。'<<'単一引用符で囲まれた 2 つの文字があるため、あまり意味がありません。

于 2012-05-28T03:42:35.900 に答える
0

<<はキャラクターではありません。どちらでもない>>。文字である は、どのようopにしてそれらのいずれかに等しくなることができますか?

于 2012-05-28T03:37:33.303 に答える
0

switch ステートメントの制御はop、case を実行するための switch ステートメントのケースの 1 つと等しくなければなりません。は 0 に初期化されて変更されないためop、等しくならない'>>''<<'、どちらのケースも実行されません。

第二に、一度だけシフトしたいように見えるので、ループはあまり意味がありません。iContそこにループが必要な場合でも、上記のコードでは が -1 に初期化され、行で false と評価されるため、反復は 1 回だけ行われwhile(iCont)ます。

op最後に、他の回答で述べたように、char ( ) を複数文字の定数と比較したくありません。

この問題opは、コードのどこかに設定することで簡単に修正できます。op次のように、整数に変更して、case ステートメントを整数ベースにすることもできます。

switch(op)
{ case 0: //left shift
break;
case 1: //right shift
break;}
于 2012-05-28T03:53:20.857 に答える