C编程 - 使用Switch语句错误左移

时间:2012-05-28 03:33:37

标签: c switch-statement

我试图在switch语句中实现shift运算符,但是我无法获得输出。 我试图做一个简单的左移,像'12<< 2'应返回'12<< 2:48' 继承我的代码:

#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);

}

3 个答案:

答案 0 :(得分:2)

在您的代码op中包含值0。您正在切换值op,该值从未赋予0以外的值。

单引号也适用于字符。 '<<'没有多大意义,因为单引号中有两个字符。

答案 1 :(得分:0)

<<不是角色。 >>也不是。op。作为一个角色的{{1}}怎么能与这些角色中的任何一个相等?

答案 2 :(得分:0)

switch语句的控制op必须等于switch语句的一个案例才能运行。由于op初始化为0且未更改,因此它不会等于'>>''<<',因此这两种情况都不会执行。

其次,你的循环并没有太大意义,因为你似乎只想换一次。即使你确实需要循环,它也只会在上面的代码中经历一次迭代,因为iCont被初始化为-1,在while(iCont)行中评估为false。

最后,正如其他答案所述,您不希望将char(op)与多字符常量进行比较。

您可以通过在代码中的某处设置op来轻松解决此问题。您还可以将op更改为整数,并使case语句为整数,如:

switch(op)
{ case 0: //left shift
break;
case 1: //right shift
break;}