#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> .