2015-08-18 114 views
1

我不知道爲什麼這個程序不能正常工作:計劃不斷崩潰

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; 

回答

1

你有strcmp(syze,"XL")==0問題。您無法將char與字符串XL進行比較。該選擇僅使用X,並與其他if(syze =='X')相同。

您在scanf("%s", &syze);中有另一個問題。使用%c掃描char

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

如果你想使用選擇「XL」留着,你應該聲明syzechar syze[3]和使用strcmp比較所有的選擇。

+0

然後我可以使用什麼var? –

+0

使用'X'而不是'XL'來選擇 –

+0

它可以。已經嘗試過了......但使用XL –

2

的問題是在

scanf("%s", &syze); 
在你的代碼

sizechar類型的,你應該使用%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()比較你的輸入。

+0

請建議一個代碼,其中我不僅使用S,M,L而且還使用XL。 –

+0

因此,strcmp比較存儲在數組中的字符串,但不是char變量中的字符串? –

+0

@FahadSaleem基本上,是的。它比較_strings_。 –