Есть ли способ поставить несколько диапазонов в одном операторе if - PullRequest
0 голосов
/ 26 февраля 2020

Я новичок в c и переполнение стека, пожалуйста, простите мои любительские ошибки, если есть какие-то ...

Я пытаюсь принять цифры от 0 до 9, заглавные и строчные буквы в мой код Так что коды ascii между 48-57 или 65-90 или 98-122. Также есть предыдущая часть кода, содержащая меню. Я не включил его для краткости.

Это первое, что я попробовал:

int main()
{

char n;

printf("\n\nWhich code will you use?: ");
scanf("%c",&n);

if (n<=57 && n>=57 || n<=65 && n>=95 || n<=98 && n>= 122)
   printf("Binary equivalent..");
                                                             /*there is supposed to be a whole another
                                                              section here.. however i haven't completed 
                                                              that yet. I put a print statement to make 
                                                              sure if the if statement would work...*/
else
   printf("Wrong input..");
}
...

Это дает результат "неправильного ввода" независимо от того, что я ввел (я ввел c, а и 4).

Во-вторых, я попытался заключить в скобки:

...

if ((n<=48 && n>=57 )||( n<=65 && n>=95 )||( n<=98 && n>= 122))

...

Затем я попытался изменить "% c" на "% d", что не Также ничего нельзя изменить.

...

printf("\n\nWhich code will you use?: ");
scanf("%d",&n);

...

Единственное, что сработало, - это разделить каждое отношение на три разных оператора if. Однако я буду писать одно и то же в каждом операторе if, который, как мне кажется, делает мой код излишне длинным ...

Ответы [ 2 ]

2 голосов
/ 26 февраля 2020

Вы перепутали направление отношений, и вы также можете использовать литералы символов. Попробуйте это

if ((n >= '0' && n <= '9') || (n >= 'A' && n <= 'Z' ) || (n >= 'a' && n <= 'z'))
1 голос
/ 26 февраля 2020

ASCII-значения

Цифры (0-9): 48 - 57
Прописные буквы (A-Z): 65 - 90
Строчные буквы (a-z): 97 - 122

Условия

c >= 48 && c <= 57: true, если c - это ди git
c >= 65 && c <= 90: true если c - это заглавная буква
c >= 97 && c <= 122: true, если c - это строчная буква

(c >= 48 && c <= 57) || (c >= 65 && c <= 90) || (c >= 97 && c <= 122): true, если c - это алфавитное число c (буква или ди git)

Но гораздо проще использовать 'a' вместо 97, потому что вам не нужно изучать всю таблицу ASCII наизусть.

Примечания

n<=48 && n>=57 всегда будут false. Если вы сделаете паузу на секунду, вы поймете, что никакое число (в таблице ASCII или нет) не может быть меньше 48 и больше 57 одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...