程序继续崩溃

时间:2015-08-18 20:27:16

标签: c segmentation-fault scanf

我不知道为什么这个程序不起作用:

 char syze;
 printf("Please enter your desired size (Choose from S,M,L,XL)\n");
 scanf("%s", &syze);

 if(syze =='S')
 {printf("Available");}


 else if(syze =='M')
     {printf("Available");}
 else if(syze =='L')
     {printf("Available");}
 else if(strcmp(syze,"XL")==0)
     {printf("Available");}
 else
     {printf("Please enter a valid character");}
    return 0;

2 个答案:

答案 0 :(得分:2)

问题在于

 scanf("%s", &syze);

在您的代码中,size的类型为char,您应该使用%c格式说明符来扫描输入。

如果您使用%s格式说明符来扫描char的输入,基本上您将超出分配的内存,从而创建undefined behaviour

然后,

 strcmp(syze,"XL")

也是错误的,因为strcmp()需要一个(constchar *作为两个参数,并且您传递char作为第一个参数。您可以简单地使用等于运算符==来比较char

最后,char永远无法容纳"XL"

解决方案:如果您需要"XL"作为输入之一,则可能需要将syze更改为数组,例如

 char syze[3] = {0};

或同样。在这种情况下,您可以将scanf()保留为

scanf("%2s", syze);

并使用strcmp()比较您的输入。

答案 1 :(得分:1)

strcmp(syze,"XL")==0出现问题。您无法将char与字符串XL进行比较。仅对该选项使用X,并与其他if(syze =='X')进行比较。

scanf("%s", &syze);还有其他问题。使用%c扫描char

 scanf("%c", &syze);`

如果您想继续使用“XL”选项,则应将syze声明为char syze[3]并使用strcmp比较所有选项。