我正在尝试将从文本文件中输入的元素与我的2D数组进行比较。文本文件的示例如下:
ABCDE
FGHIK
LMNOP
我知道我可以在文件中读得很好,也可以打印每个元素。
我正在尝试将每个角色与下一个角色进行比较。在我的脑海中,这是它的工作原理: 如果它们匹配,则转到下一个char,然后将该char与下一个char进行比较。如果它们不匹配,则将“错误”打印到终端并中断switch语句。虽然当我在我的程序中运行它时,它只打印出“这是否被这种情况所困扰?” “确实是”。对我可能做错的任何帮助都会非常有帮助。
void match_char(char** array, int height, int width){
int a, i, j;
printf("Is this being accessed?");
a = 0;
i = 0;
j = 0;
switch(a){
case 1: if(a <1 ){
for(j = 0; j < width; j++){
if (array[i][j] != array[i][j+1]){
printf("error\n");
break;
} else if(j == width) {
a=1;
break;
}
}
}/* End of case 1*/
case 2: if (a > 0 && a < 2){
for(i = 0; i < height; i++){
if (array[i][j] != array[i+1][j]){
printf("error\n");
break;
}else if(i == height) {
printf("No error");
a=2;
break;
}
}
}/* End of case 2 */
case 3:
if (a > 2) {
a=0;
break;
}
}/*End of switch */
printf("It sure is");
}
答案 0 :(得分:3)
为了清楚起见,在case X
中,X
不是该案例的标签,而是检查Y
中的switch(Y)
是否等于X
。
为了帮助实现这一点,我们将交换机重写为if... else
语句。
a = 0;
if(a == 1){ // == case 1
// stuff
} else if(a == 2){ // == case 2
// stuff
} else { // == default
...
现在if
中的switch
语句与case
是否已执行无关。
现在,让我们谈谈switch
的工作原理。编译代码时,根据每个case
的值范围,生成跳转表或与if... else if... else
语句几乎相同的内容。无论如何,您有一份说明清单。伪装配看起来像这样:
instruction n : multiply the value of a by some offset and jump to a*offset + n
n +a*offset_1 : do stuff
jump to m // break
n +a*offset_2 : do stuff
jump to m // break
n +a*offset_3 : do stuff
jump to m // break
n +a*offset_4 : do stuff
jump to m // break
instruction m : do more stuff
如果你休假,
instruction n : multiply the value of a by some offset and jump to a*offset + n
n +a*offset_1 : do stuff
n +a*offset_2 : do stuff
n +a*offset_3 : do stuff
n +a*offset_4 : do stuff
instruction m : do more stuff
因此,您可以看到为什么break
阻止其他案例被执行 - 并且将它们排除在案例之后以及每个案例执行之后,无论您是否符合{{1条件。
答案 1 :(得分:1)
在第一个案例标签中,您询问是否&lt;用== 1到达那里后1,所以if总是假的。
在第二种情况下,a == 2,所以它不能等于1(if检查&gt; 0和&lt; 2,所以它只能等于1才能进入if)< / p>
在第三种情况下,你要求&gt; 2(总是,当你在= = 3时到达那里)所以必须正确地重新定义所有if条件。
我想你知道你初始化a = 0并且没有a的值,所以你只是在不输入任何情况下跳过开关。
你也没有用过休息;句子,我想故意,但因为你没有任何== 0的情况,你永远不会进入任何转换案例。