Для начала ваша переменная answer
должна иметь тип char
, а не char*
.
Что касается оператора if
:
if (answer == ('Y' || 'y'))
Этосначала оценивается 'Y' || 'y'
, что в булевой логике (и для ASCII) является истинным, поскольку оба они являются "истинными" (ненулевыми).Другими словами, вы можете запустить оператор if
только в том случае, если вы каким-либо образом введете CTRL A (опять же, для ASCII, где истинные значения равны 1) * a .
Вы могли бы использовать более правильное:
if ((answer == 'Y') || (answer == 'y'))
, но вам действительно следует использовать:
if (toupper(answer) == 'Y')
, поскольку это более переносимый способ достижения той же цели.
* a Вы можете удивиться, почему я добавляю всевозможные условия для своих утверждений,Хотя подавляющее большинство реализаций C использует ASCII и некоторые известные значения, это не обязательно предписывается стандартами ISO.Я точно знаю, что по крайней мере один компилятор все еще использует EBCDIC, поэтому я не люблю делать необоснованные предположения.