#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);
}
答案 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;}