C——不计算开关中的多个Scanf语句

C——不计算开关中的多个Scanf语句,c,switch-statement,scanf,C,Switch Statement,Scanf,我对一些非常基本的C代码有一个问题,对于这些代码,我无法找到任何现有StackOverflow问题的解决方案 问题很简单:我有两个scanf语句,分别位于switch语句的两个不同的案例中。每次都完美地执行第一条语句。但是,第二种方法不起作用,无论开关在哪种情况下进行计算 我写了一个小程序来演示这个问题: #include<stdio.h> #include<string.h> int main(void) { int i = 0; char *str1; char

我对一些非常基本的C代码有一个问题,对于这些代码,我无法找到任何现有StackOverflow问题的解决方案

问题很简单:我有两个
scanf
语句,分别位于
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;
}
如果运行时使用
i=1
“hello”
,则输出

String 1: 
String 2: (null)
Return 1: 0
Return 2: 0
正如您所看到的,字符串2从来没有被赋予值,尽管它运行了
案例

对我来说,这意味着
switch
语句以某种方式贯穿每一个
案例
直到匹配的案例,而没有实际评估其中的内容,因为
state1
state2
在第二个实例中都是0


有人知道为什么会发生这种情况,以及我如何解决这个问题吗?

变量
I
仅设置为0,因此只会计算开关/案例0:

switch语句永远不会重新输入,
i
的值永远不会更新,因此不会计算/执行其他开关/案例


我怀疑你关于
开关
语句如何工作的想法不太正确。

char*str1;char*str2它们不指向有效区域。更改为like
charstr1[32]={0}
state1=scanf(“%31s”,str1)
您可能希望为从命令行读取的字符串分配一些内存。否则scanf只会写入str1和str2中的(未定义的)内存地址-->
int state1=-999,state2=-999state1=scanf(“%s”,str1)试图设置指针指向的内容;然而,真正需要的是一些内存分配
charstr1[20];'然后是语句:
state1=scanf(“%19s”,str1);`变量
state1
将包含1或0或EOF(有关详细信息,请阅读
man
页面中的
scanf()
String 1: 
String 2: (null)
Return 1: 0
Return 2: 0