Member 13734606 Ответов: 3

Можно ли использовать 'и' & 'или' с isupper и isdigit я пытаюсь запустить приведенный ниже код, но он не работает.


int main()
{
    char pass[8];
    printf("Enter your password: (Maximum 8 characters)");
    scanf("%c",pass);

    if(isdigit(pass[0])  &&  isdigit(pass[1])){
    printf("AKH");
    }

    return 0;
}


Я ожидаю, что printf будет работать, если первый или второй символ является цифрой, но он работает только для первого символа.

Что я уже пробовал:

Я попробовал сделать OR с символами " 1 " и "0" вместо ссылки на массив, и это сработало нормально. Пожалуйста мне нужна помощь

CPallini

Вы используете и там, где вам нужно или.

Richard MacCutchan

Ваша строка формата scanf неверна. %c это для одного персонажа. Тебе нужно %s для строки. Вам также понадобится массив из 9 символов, чтобы содержать 8 символов, так как строка в C содержит дополнительный нуль в конце.

3 Ответов

Рейтинг:
21

Patrice T

Попробуй

if((isdigit(pass[0]) || isdigit(pass[1])){

Будьте осторожны с отсутствием '(' в вашем коде

&& - это обозначение C для логического и: результат истинен, если обе части истинны.
((isdigit(pass[0]) && isdigit(pass[1]))
// means
((isdigit(pass[0]) AND isdigit(pass[1]))


|| является обозначением C для логического ИЛИ: результат истинен, если хотя бы одна часть истинна.


CPallini

5.

Patrice T

Спасибо

Рейтинг:
17

Jochen Arndt

Цитата:
Я ожидаю, что printf будет работать, если первый или второй символ является цифрой, но он работает только для первого символа.
Это потому что Вы читаете только один символ:
scanf("%c",pass);

Формат для чтения строк таков "%s" пока "%c" читает один символ. Так что вы должны использовать
scanf("%s",pass);


Рейтинг:
0

Member 13734606

Я исправил логический оператор, но проблема была с %c. После изменения его на %s он работает нормально. Спасибо за ответы