有没有一种方法可以将多个范围放在一个if语句中

时间:2020-02-26 18:11:27

标签: c if-statement ascii

我是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,a和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 个答案:

答案 0 :(得分:2)

您弄乱了关系方向,也可以使用字符文字。试试这个

if ((n >= '0' && n <= '9') || (n >= 'A' && n <= 'Z' ) || (n >= 'a' && n <= 'z'))

答案 1 :(得分:1)

ASCII值

数字(0-9):48-57
大写字母(A-Z):65-90
小写字母(a-z):97-122

条件

c >= 48 && c <= 57:如果true是数字,则c
c >= 65 && c <= 90:如果true是大写字母,则为c
c >= 97 && c <= 122:如果true是小写字母,则c

(c >= 48 && c <= 57) || (c >= 65 && c <= 90) || (c >= 97 && c <= 122):如果c是字母数字(字母或数字),则为true

但是使用'a'而不是97要容易得多,因为您不需要那样地学习整个ASCII表。

注释

n<=48 && n>=57将始终为false。如果暂停一秒钟,您将意识到(无论是否在ASCII表中)数字不能同时小于48并大于57