我不知道为什么这个程序不起作用:
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;
答案 0 :(得分:2)
问题在于
scanf("%s", &syze);
在您的代码中,size
的类型为char
,您应该使用%c
格式说明符来扫描输入。
如果您使用%s
格式说明符来扫描char
的输入,基本上您将超出分配的内存,从而创建undefined behaviour
然后,
strcmp(syze,"XL")
也是错误的,因为strcmp()
需要一个(const
)char *
作为两个参数,并且您传递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
比较所有选项。