比较数字和字母
compare number to letter
是否可以将数字与字母进行比较并从中区分出来?
我想做的是:
- 询问用户
0-10
之间的数字(从菜单中选择)
- 检查那个数字是多少,如果数字不在
0-10
之间,它将
向用户询问另一个号码
在用户输入字母(例如 'A')之前,这一切都运行良好。
我正在使用 scanf()
将用户输入的值存储在整数变量中。因此,如果用户 inputs 'A'
,值 65 将存储在变量中。
这让我很头疼,因为我想区分字母和数字..
这是我检查输入的代码:
int checkNumber(int input,int low,int high){
int noPass=0,check=input;
if(check<low){
noPass=1;
}
if(check>high){
noPass=1;
}
if(noPass==1){
while(noPass==1){
printf("Input number between %d - %d \n",low,high);
scanf("%d",&check);
if((check>low)&&(check<high)){
noPass=0;
}
}
}
return check;
}
如果用户在此函数的 while 循环中输入一个字母,会发生什么情况;它开始无休止地循环,要求在低和高之间输入。
我想以某种方式过滤掉字母,而不是实际过滤掉 letter's values (65 and above)
。
-这可能吗?
字符自动转换为 ASCII 码 (http://www.c-howto.de/tutorial-anhang-ascii-tabelle.html)。就像你看到的那样,字符的数字都超过了你接受的 10,所以最简单的方法是只检查数字是否像你说的那样在 0-10 之间
所以我继续解决这个问题并想出了这个解决方案:
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
//pre: stdlib.h and ctype.h needs to be included, input cannot be initialized to a value within low and high, low cannot be greater than high
//post: returns an integer value that ranges between low and high
int checkNumber(int input,int low,int high){
int noPass=0,check=input;
if(low>high){
printf("Low is greater than high, abort! \n");
exit(EXIT_FAILURE);
}
if(isdigit(check)){
noPass=1;
}
if((check<low)||(check>high)){
noPass=1;
}
if(noPass==1){
while(noPass==1){
printf("Input a number between %d - %d \n",low,high);
scanf("%d",&check);
getchar();
if((check>=low)&&(check<=high)){
noPass=0;
}
}
}
return check;
}
int main(int argc, char *argv[]){
int i=2147483647;
printf("Choose an alternative: \n");
printf("1. Happy Fun time! \n");
printf("2. Sad, sad time! \n");
printf("3. Indifference.. \n");
printf("4. Running out of ideas. \n");
printf("5. Placeholder \n");
printf("6. Hellow World? \n");
printf("0. -Quit- \n");
scanf("%d",&i);
getchar();
i=checkNumber(i,0,6);
if(i==0){
printf("You chose 0! \n");
}
if(i==1){
printf("You chose 1! \n");
}
if(i==2){
printf("You chose 2! \n");
}
if(i==3){
printf("You chose 3! \n");
}
if(i==4){
printf("You chose 4! \n");
}
if(i==5){
printf("You chose 5! \n");
}
if(i==6){
printf("You chose 6! \n");
}
return 0;
}
它按照我想要的方式工作,但并不完美。最大的缺陷是 input (int i
, in main()
) 中的值的变量不能初始化为 low 和 high 之间的值。
例如:如果 int i=3; low=0,high=6,用户写信:i的值保持3。3发送给checkNumber,立即传为3。
我选择将 i 初始化为 2147483647,这是一个不太可能的数字 - 但它仍然是可能的。
结论:它有效,但有缺陷。
是否可以将数字与字母进行比较并从中区分出来?
我想做的是:
- 询问用户
0-10
之间的数字(从菜单中选择) - 检查那个数字是多少,如果数字不在
0-10
之间,它将 向用户询问另一个号码
在用户输入字母(例如 'A')之前,这一切都运行良好。
我正在使用 scanf()
将用户输入的值存储在整数变量中。因此,如果用户 inputs 'A'
,值 65 将存储在变量中。
这让我很头疼,因为我想区分字母和数字..
这是我检查输入的代码:
int checkNumber(int input,int low,int high){
int noPass=0,check=input;
if(check<low){
noPass=1;
}
if(check>high){
noPass=1;
}
if(noPass==1){
while(noPass==1){
printf("Input number between %d - %d \n",low,high);
scanf("%d",&check);
if((check>low)&&(check<high)){
noPass=0;
}
}
}
return check;
}
如果用户在此函数的 while 循环中输入一个字母,会发生什么情况;它开始无休止地循环,要求在低和高之间输入。
我想以某种方式过滤掉字母,而不是实际过滤掉 letter's values (65 and above)
。
-这可能吗?
字符自动转换为 ASCII 码 (http://www.c-howto.de/tutorial-anhang-ascii-tabelle.html)。就像你看到的那样,字符的数字都超过了你接受的 10,所以最简单的方法是只检查数字是否像你说的那样在 0-10 之间
所以我继续解决这个问题并想出了这个解决方案:
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
//pre: stdlib.h and ctype.h needs to be included, input cannot be initialized to a value within low and high, low cannot be greater than high
//post: returns an integer value that ranges between low and high
int checkNumber(int input,int low,int high){
int noPass=0,check=input;
if(low>high){
printf("Low is greater than high, abort! \n");
exit(EXIT_FAILURE);
}
if(isdigit(check)){
noPass=1;
}
if((check<low)||(check>high)){
noPass=1;
}
if(noPass==1){
while(noPass==1){
printf("Input a number between %d - %d \n",low,high);
scanf("%d",&check);
getchar();
if((check>=low)&&(check<=high)){
noPass=0;
}
}
}
return check;
}
int main(int argc, char *argv[]){
int i=2147483647;
printf("Choose an alternative: \n");
printf("1. Happy Fun time! \n");
printf("2. Sad, sad time! \n");
printf("3. Indifference.. \n");
printf("4. Running out of ideas. \n");
printf("5. Placeholder \n");
printf("6. Hellow World? \n");
printf("0. -Quit- \n");
scanf("%d",&i);
getchar();
i=checkNumber(i,0,6);
if(i==0){
printf("You chose 0! \n");
}
if(i==1){
printf("You chose 1! \n");
}
if(i==2){
printf("You chose 2! \n");
}
if(i==3){
printf("You chose 3! \n");
}
if(i==4){
printf("You chose 4! \n");
}
if(i==5){
printf("You chose 5! \n");
}
if(i==6){
printf("You chose 6! \n");
}
return 0;
}
它按照我想要的方式工作,但并不完美。最大的缺陷是 input (int i
, in main()
) 中的值的变量不能初始化为 low 和 high 之间的值。
例如:如果 int i=3; low=0,high=6,用户写信:i的值保持3。3发送给checkNumber,立即传为3。
我选择将 i 初始化为 2147483647,这是一个不太可能的数字 - 但它仍然是可能的。
结论:它有效,但有缺陷。