首页新闻找找看学习计划

C语言怎样实现只允许输入数字0-4,不允许输入符号、字母等

0
[已解决问题] 解决于 2016-07-23 10:20

//app.h
int show_menu()
{
    int chioce_num;

    printf("----------------------------------\n");
    printf("2013110209\n2013110220\n2013110230\n");
    printf("----------------------------------\n");
    printf("0.List all process ids\n");
    printf("1.Show current process id\n");
    printf("2.Check process info\n");
    printf("3.Check environment variable\n");
    printf("4.Exit\n");
    printf("----------------------------------\n");
    printf("Please Enter Your Choice:");
    scanf("%d",&chioce_num);
       
    if(chioce_num<0||chioce_num>4)
    {
        printf("please input a right number(0-4)!!!!!!!!!!!\n");
    }

    return chioce_num;

}

//main.c


#include<stdio.h>
#include"app.h"
int main()
{
    int case_num;
    
    while(1)
    {
        case_num=show_menu();//这里也有点问题,为什么返回的还有函数本身,那怎么才能让其只返回一个chioce_num??
        switch(case_num)
        {
            case 0:
                //list_processes();
                printf("000000000000000000000000000\n");
                break;
            case 1:
                //show_Id();
                printf("1111111111111111111111111111\n");
                break;
            case 2:
                //function_two();
                printf("22222222222222222222\n");
                break;
            case 3:
                //function_three();
                printf("333333333333333333333\n");
                break;
            case 4:  
                return 0;
                break;

        }
    }
}

怪你无可取代的主页 怪你无可取代 | 菜鸟二级 | 园豆:244
提问于:2016-03-30 09:58
< >
分享
最佳答案
0

报错原因:

//scanf("%d", &chioce_num);//利用%d接受的只能是数字,所以你发现在接受数字的时候没有问题,但是如果是字符的话,就不行了。

解决方式:

#include <stdio.h>
#include <string.h>
#pragma warning(disable:4996)

int isok(const char*choice,int length){
    if (length > 1)//输入的不止一个字符
        return 5;//返回一个值,只要让它不正确就可以了。随便是什么只要不是01234.
    //printf("%d\n",length);否则,输入的就是一个字符是的话


    //printf("%d ", atoi("0"));//他们俩都是返回的0
    //printf("%d \n", atoi("asdf"));//这事儿不好
    char character = choice[0];
    if (character != '0'&&character != '1'&&character != '2'&&character != '3'&&character != '4'){//这一个字符不是01234的话
        return 5;//返回一个错误的数儿
    }

    //否则就是一个合法的输入。
    
    return atoi(choice);
}
int show_menu()
{
    //int chioce_num=0;
    char *choice;
    choice = malloc(sizeof(char)*10);

    printf("----------------------------------\n");
    printf("2013110209\n2013110220\n2013110230\n");
    printf("----------------------------------\n");
    printf("0.List all process ids\n");
    printf("1.Show current process id\n");
    printf("2.Check process info\n");
    printf("3.Check environment variable\n");
    printf("4.Exit\n");
    printf("----------------------------------\n");
    printf("Please Enter Your Choice:");
    //scanf("%d", &chioce_num);//利用%d接受的只能是数字,所以你发现在接受数字的时候没有问题,但是如果是字符的话,就不行了。
    //尝试方式1:
    //改成 char*的变量
    scanf("%s", choice);
    printf("调试输出时使用,输入的是:%s\n",choice);
    int result = isok(choice,strlen(choice));

    free(choice);//释放空间

    /*if (chioce_num<0 || chioce_num>4)
    {
        printf("please input a right number(0-4)!!!!!!!!!!!\n");
    }*/

    return result;

}

依然有bug,如果要了命的输入27个字符的话。估计就会有问题。理论上这个数字大于10就会有问题。因为我们分配了10个char大小的空间。

这部分知识估计你们还没有讲到。就是关于这个malloc关键字这里。

//关于过长输入 可以 把choice = malloc(sizeof(char)*10) 这里面的10 改成1024,不会有人无聊到输入1024个字符的。有,,,的话咱再想办法。。。

奖励园豆:5
木鸟飞 | 菜鸟二级 |园豆:219 | 2016-03-30 13:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册