0

我试图在 switch 语句中实现移位运算符,但我无法获得输出。我试图做一个简单的左移,比如 '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);

}
4

3 回答 3

2

在您的代码op中包含 value 0。您正在打开从未分配过除 0 以外的值的值 op。

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

于 2012-05-28T03:42:35.900 回答
0

<<不是一个字符。也不是>>op作为一个角色,怎么可能永远等于其中任何一个?

于 2012-05-28T03:37:33.303 回答
0

switch 语句的控制,op必须等于 switch 语句的 case 之一才能运行。由于op被初始化为 0 并且不会改变,它永远不会等于'>>''<<',因此这两种情况都不会执行。

其次,你的循环也没有多大意义,因为你似乎只想换一次。即使你确实想要那里的循环,它也只会在上面的代码中进行一次迭代,因为它被初始化为 -1,它在该行iCont中计算为 false 。while(iCont)

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

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

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