//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;
}
}
}
报错原因:
//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个字符的。有,,,的话咱再想办法。。。