C编程-带开关语句错误的左移
我试图在switch语句中实现移位运算符,但在获取输出时遇到了问题。C编程-带开关语句错误的左移,c,switch-statement,C,Switch Statement,我试图在switch语句中实现移位运算符,但在获取输出时遇到了问题。 我试着做一个简单的左移,比如'12。op是一个字符,它怎么可能与这两个字符中的任何一个相等呢?在代码中op包含值0。您正在打开值op,该值从未分配过除0以外的值 单引号也用于字符“switch语句的控件,op必须等于switch语句的案例之一,案例才能运行。由于op被初始化为0并且没有更改,因此它永远不会等于'>'或'您没有在循环中设置op或更改iCont,您可能不想将char变量与2字符文本进行比较。欢迎使用StackOve
我试着做一个简单的左移,比如'12
。op
是一个字符,它怎么可能与这两个字符中的任何一个相等呢?在代码中op
包含值0
。您正在打开值op,该值从未分配过除0以外的值
单引号也用于字符
“switch语句的控件,op
必须等于switch语句的案例之一,案例才能运行。由于op
被初始化为0并且没有更改,因此它永远不会等于'>'
或'您没有在循环中设置op
或更改iCont
,您可能不想将char
变量与2字符文本进行比较。欢迎使用StackOverflow。虽然很高兴你发布了你的代码(并且不厌其烦地正确格式化了它-谢谢!),但你真的没有问任何问题。你说“我很难获得输出”,但你没有说“麻烦”是什么意思。既然我们没有,如果你解释一下你遇到了什么“麻烦”,什么“不起作用”,或者什么“错误”是明确的,这会有帮助。问题在哪里?有人偷了这个问题吗我已经回复了你的问题。请不要发布问题,然后删除其内容(即使问题本可以问得更好)。这样做会使现有答案变得毫无意义,并破坏可搜索性。实际上,。@KeithThompson这就是为什么我没有说这是一个错误,只是没有多大意义:)这实际上不是问题所在(问题是op
被初始化为0
,然后在代码中从未更改),但它也不能真正成为一个答案(因为它不是——这是一个你在海报上问的问题)。没有否决权-只是说“.”:-)@肯怀特:他问为什么他的代码不起作用。代码中任何足以阻止其工作的缺陷都是可以接受的答案。那我想我不同意。:-)问题在于op
设置为零且从未更改,但用于确定开关的路径;如果你永远无法到达那个点,那么开关中的分支所包含的内容是毫无意义的。“即使寄到法国巴黎A街1号,邮件也永远不会送到我家。”。“但你住在英格兰的伦敦。”。“那么?它的地址是1 A Street
”@KenWhite:此代码存在多个问题。即使op
已正确初始化,它仍然无法与开关
语句匹配。不理解如何为开关/大小写指定字符常量是对该语言的根本误解。修复op
的初始化是重新安排泰坦尼克号上的躺椅。不合逻辑的开关/案例是冰山一角。(想想一个有经验的程序员可能会犯什么错误,并经常进行调试,这表明存在误解。)我的观点是,无论其他问题是什么,如果代码永远无法到达那里,它们都无关紧要。想想我的最后一句话——如果他们把你的姓拼错了,如果你再也看不到的话,那也没关系。解释一下你的意思:“op
,也就是字符,怎么可能等于你分配给它的零以外的任何东西,而且从来没有改变过?”我理解你所说的‘你不想比较字符(op)’”对于MC constance,在本例中是“我不太确定在将op更改为int.Good后,您何时说‘在代码中的某个地方设置op’”。那么,您发布的代码到底有什么问题?我们如何帮助您解决?
#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);
}
switch(op)
{ case 0: //left shift
break;
case 1: //right shift
break;}