Начните здесь
if (domain[y] == 46 || 65<=domain[y]<=90 || 97<=domain[y]<=122){
^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^
C не может обработать оператор, такой как n <= X <= m
, как вы ожидаете.
C трактует это как:
(65<=domain[y]) <= 90
^^^^^^^^^^^^^^^ ^^
bool <= number
Итак, сначала C вычислит результат bool из 65<=domain[y]
, а затем сравнит этот bool с числом. Значение bool конвертируется в 0 или 1, поэтому при сравнении с 90 результат всегда будет истинным.
Если бы вы проверили предупреждения компилятора, вы бы увидели что-то вроде:
main.cpp:18:49: warning: comparison of constant '90' with boolean expression is always true [-Wbool-compare]
18 | if (domain[y] == 46 || 65<=domain[y]<=90 || 97<=domain[y]<=122){
| ^~
который говорит вам, что что-то не так.
Вам нужно написать
if (domain[y] == 46 || (65<=domain[y] && domain[y]<=90) || (97<=domain[y] && domain[y]<=122)){
КСТАТИ:
Не используйте маги c числа, такие как 65, 90 и скоро. Используйте вместо этого персонажа. Например:
(65<=domain[y] && domain[y]<=90) --> ('A' <= domain[y] && domain[y] <= 'Z')
Это значительно облегчает понимание кода.
Далее - рассмотрите возможность использования функции isalpha(domain[y])
для таких проверок.
Наконец - Ваш текст ( и имя функции) говорит, что вы хотите проверить доменное имя. Тем не менее, ваш ввод больше похож на адрес электронной почты.