C——不计算开关中的多个Scanf语句
我对一些非常基本的C代码有一个问题,对于这些代码,我无法找到任何现有StackOverflow问题的解决方案 问题很简单:我有两个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
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代码>它们不指向有效区域。更改为likecharstr1[32]={0}代码>。state1=scanf(“%31s”,str1)
您可能希望为从命令行读取的字符串分配一些内存。否则scanf只会写入str1和str2中的(未定义的)内存地址代码>-->int state1=-999,state2=-999避免使用未初始化的变量。嗯,在问我的第一个问题时,忽略这一点是相当愚蠢的。为字符串分配空间修复了它。谢谢如果你加上这个作为答案,我会接受的。这种说法:state1=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