我遇到一些非常基本的C代码问题,我无法在任何现有的StackOverflow问题上找到解决方案。
问题很简单:我在scanf
语句的两个cases
内有两个switch
语句。第一个语句每次都完美执行。然而,第二种情况并不起作用,无论switch
正在评估哪种情况。
这是我编写的一个小程序来演示这个问题:
#include<stdio.h>
#include<string.h>
int main(void)
{
int i = 0;
char *str1;
char *str2;
int state1, state2;
switch(i)
{
case 0:
state1 = scanf("%s", str1);
getchar();
break;
case 1:
state2 = scanf("%s", str2);
getchar();
break;
default:
printf("Something weird happened.\n");
break;
}
printf("String 1: %s\nString 2: %s\nReturn 1: %d\nReturn 2: %d\n", str1,
str2, state1, state2);
return 0;
}
getchar
用于确保它不会出现输入溢出问题。
如果我使用输入i = 0
的{{1}}运行,那么我
"hello"
如果使用String 1: hello
String 2: (null)
Return 1: 1
Return 2: 4195648
和i = 1
运行,则输出
"hello"
正如您所看到的,尽管遍历String 1:
String 2: (null)
Return 1: 0
Return 2: 0
,但字符串2从未被赋予值。
对我而言,这意味着case
语句以某种方式贯穿每个switch
直到匹配的语句而不实际评估其中的内容,因为case
和{{} {1}}在第二个实例中为0。
有谁知道为什么会发生这种情况以及如何解决这个问题?
答案 0 :(得分:0)
变量i
仅设置为0,因此仅评估开关/案例0:。
永远不会重新输入switch语句,并且永远不会更新i
的值,因此不会评估/执行任何其他开关/案例。
我怀疑你对switch
语句如何工作的想法并不完全正确。