C — если с более чем 1 ИЛИ

#c #if-statement

#c #оператор if

Вопрос:

Я написал функцию для проверки, является ли строковый массив именем (каждый символ может быть только a-> z или A-> Z или пробелом) Однако, если я запускаю свою программу, она не работает должным образом. Если я попытаюсь его отладить, я вижу, что он переходит к возвращению строки 0; даже если первый символ в массиве равен ‘M’. Кто-нибудь может мне помочь?

 int je_meno(char array[]) {
    int i=0;
    while(array[i]!=0){
        if(array[i]<32 || 32<array[i]<65 || 90<array[i]<97 || 122<array[i]){
            return 0;
        }
        i  ;
    }
    return 1; }
  

Комментарии:

1. 32<array[i]<65 C не поддерживает логическую цепочку, подобную этой. Должно быть (32<array[i] amp;amp; array[i]<65) . Кроме того, не используйте магические числа. Используйте символьные константы 'a' , 'z' , и т.д.

Ответ №1:

Может ли он даже скомпилировать сравнения цепочек? Попробуйте упростить условие до чего-то вроде:

 if( !(array[i]>=65 amp;amp; array[i] <=90 || array[i]>=97 amp;amp; array[i]<=122 || array[i]==32) )
{
   return 0;
}
  

В основном, если array[i] НЕ является (заглавный символ, маленький символ или пробел), возвращает 0

Ответ №2:

Вы могли бы использовать функции isalpha() и isdigit() следующим образом:

 return !(isalpha(c) || isdigit(c) || (c == ' '));
  

Третье выражение — это если вы хотите включить пробелы в свое имя.

Итак, строка с оператором if должна быть такой:

 if !(isalpha(array[i]) || isdigit(array[i]) || (array[i] == ' ')) {
  

Я думаю, вам нужно будет включить <ctype.h> .