如果输入是数字,则测试输入

时间:2014-11-08 03:15:06

标签: c

我写了一个C程序,其中我接受用户的数字输入。但是,如果用户输入了一个字符,那么我必须表明它是一个无效的输入并让用户再次输入一个数字。我该如何实现这一目标?我在Ubuntu中使用gcc编译器编写程序。 Google上的搜索结果建议使用isalpha函数...但是,我猜这些库中没有它。

我也试过以下......

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

void main()
{
    system("clear");
    if (isdigit(1))
        printf("this is an alphabet\n");
    else
        printf("this is not an alphabet\n");
}

4 个答案:

答案 0 :(得分:0)

您需要使用scanf来获取%d的用户输入,因为您要扫描整数。在您的情况下,scanf将在成功扫描时返回1。

int num;
//loop to prompt use to enter valid input
while(scanf("%d",&num)==0) //scanning an integer failed
{
    printf("invalid input ! Try again\n");
    scanf("%*s"); //remove the invalid data from stdin
}

当您使用isalpha()中的isdigit()获取字符输入时,函数%cscanf可用。如果您想使用%c扫描输入,那么只需检查您在代码中执行的操作,只要您使用%c获得输入即可。请注意,字符1('1')等于整数1。字符的整数值由the ASCII table表示。当用户输入使用%c的号码的任何其他内容时,您的程序会再次提示用户:

    char ch;
    while(1){
        printf("Enter a number\n");
        scanf(" %c",&ch);

        printf(Your input is %c\n",ch);
        if(isdigit(ch))
        {
            printf("This is a number\n");
            break;
        }
       else
           printf("This is not a number. Invalid input\n");
    }

答案 1 :(得分:0)

我尝试了下面的代码,它工作得很好..使用isdigit()

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>

void main()
{
    system("clear");
    char str[1];

    printf("Enter a number\n");
    scanf("%s",str);

    printf("What you entered was %s\n",str);
    if(isdigit(str[0]))
        printf("this is not an alphabet\n");
    else
        printf("this is an alphabet\n");
}

答案 2 :(得分:0)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include<ctype.h>
int main()
{
    char c;
    printf("Enter a character: ");
    scanf("%c",&c);
    bool check=true;

    while(check)
    {
    if( (c>='a'&& c<='z') || (c>='A' && c<='Z'))
       {
           printf("%c is an alphabet.",c);
           check=true;
           break;
       }
    else
    {
       printf("%c is not an alphabet.",c);
        check=false;
    }
    }
    return 0;
}

答案 3 :(得分:-1)

你可以自己写。最好检查数字,因为数字的情况较少。

bool isDigit(char c) {
    bool rtn = false;
    switch(c) {
        case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
            rtn = true;
            break;
        default:
            rtn = false;
            break;
    }
return rtn;
}