2015-08-18 6 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», вы должны объявить syze как char syze[3] и сравнить все варианты использования strcmp.

+0

какой var я могу использовать? –

+0

Используйте 'X' вместо' XL' для выбора –

+0

Это работает. Уже пробовал ... Но важно использовать XL –

2

Проблема заключается в

scanf("%s", &syze); 

в вашем коде, size имеет типа char и вы должны использовать формат %c спецификатор для сканирования входа.

Если вы используете %s спецификатора формата для сканирования входа для char, по сути вы будете накатом выделенной памяти, тем самым создавая undefined behaviour

Затем

strcmp(syze,"XL") 

также не так, как strcmp() потребности a (const) char * как оба аргумента, и вы передаете 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_. –

Смежные вопросы