Прежде всего, всегда ограничивайте длину ввода при использовании scanf()
, например
scanf("%9s", command);
для массива из 10 элементов char
, чтобы избежать переполнения буфера из-за слишком длинных входов.
Тем не менее, логика блока if...else
работает следующим образом:
if (expression is true) { // produce a non-zero value, truthy
execute the if block
}
else { // expression is falsy
execute the else block
}
В вашем случае управляющим выражением является strcmp(set, command)
.
Теперь укажитеобратите внимание, что в случае совпадения , strcmp()
возвращает 0
, в случае несоответствия возвращает ненулевое значение.
Таким образом,
- Если ваш ввод соответствует ожидаемой предварительно выбранной строке, вы получите
0
- который будет оцениваться как falsy и против вашегоожидание, оно перейдет к части else
. - Если ваш ввод не соответствует ожидаемой предварительно выбранной строке, вы получите ненулевое значение, которое будетоценивается как верный и еще раз, блок
if
будет выполнен ошибочно.
Итак, в вашем случае вам нужно изменить условие, чтобы отменить возвращаемое значениеуу, как
if (!strcmp(set, command))
{
printf("You asked for help");
}
else if (!strcmp(set1, command))
{
printf("You said thanks!");
}
else
{
printf("use either help or thanks command");
}