比较数字到字母

时间:2015-12-18 10:34:15

标签: comparison letters-and-numbers

是否可以将数字与字母进行比较并从中产生差异?

我要做的是:

  • 向用户询问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)

- 这可能吗?

3 个答案:

答案 0 :(得分:1)

你可以用一个额外的变量来解决无限循环,在check变量上输入并插入另一个变量,并使用强制转换为整数,并且使用其他变量无限循环的检查将会消失。

答案 1 :(得分:1)

所以我继续努力解决这个问题,我提出了这个解决方案:

#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;
}

它按我想要的方式工作,但它并不完美。最大的缺陷是输入值(int imain())中的变量无法初始化为低值和高值之间的值。 例如:if int i = 3; low = 0和high = 6,用户写一封信:i的值保持为3. 3发送到checkNumber,立即传递给3。

我选择初始化为2147483647,这是一个不太可能的数字 - 但它仍然有可能。

总之:它有效,但它有缺陷。

答案 2 :(得分:0)

char会自动转换为ASCII代码(http://www.c-howto.de/tutorial-anhang-ascii-tabelle.html)。就像你可以看到的那样,字符的数字都超过10你接受,所以最简单的方法是只检查数字是否在0-10之间,就像你说的那样