scanf()和getchar()在控制终端菜单

来源:互联网 发布:上市公司毛利率算法 编辑:程序博客网 时间:2024/06/01 07:19

笔者习惯于用getchar()处理控制终端菜单的选项操作,用scanf()处理用户的数值、字符串的输入操作。对于不同的操作,程序需要对输入进行验证,防止崩溃。

scanf()输入验证

1==scanf("%d",&x)//利用scanf()的返回值做类型的输入验证
while( 1==scanf("%d",&x) && x>0)//利用逻辑运算短路做类型和范围的输入验证{…}   
while( 2==scanf("%d %d",&x,&y) && inLimit(x,y) )//inLimit是一个检测范围的函数,返回bool值{…}

getchar()输入验证

while( (ch=getchar())!='#' ) //同时完成赋值和输入验证,'#'为文本结束标志{…}

对多余字符进行清空缓冲区(如只需要读一行首字母

while( (ch=getchar())!='\n' ) continue;

scanf("%*s");//*修饰符抑制输入

错误处理

while( 1!=scanf("%d",&x)  ){    //错误提示,重新输入}

while( (ch=getchar()) != '…'){    //错误提示,重新输入}

while((ch=getchar())!='…')//这里用作了结束判定{    switch(ch)     {        …        default:            //错误提示            continue;    }}

简单的控制终端菜单思路

printf("…");//菜单的界面打印与输入提示while((ch=getchar())!='…')//这里是结束判定{    switch(ch)//处理选项    {        case 'a':            …;            breakcase 'b':            …;            break;        case …:            …;        default:            //错误提示            continue;//重新输入    }    while( (ch=getchar())!='\n' ) continue;//处理后面的字符    printf("…");//菜单的界面打印与输入提示}

关于getchar()和scanf()
1.getchar()对缓冲区逐个读取,包括空白字符(空格、制表符、换行符等等),对字符的处理较为方便;scanf()从第一个非空白字符开始读取,直到下一个空白字符结束,不读取空白字符;所以在字符混合输入时,要小心换行符的处理。
2.getchar()的返回值是int,返回EOF可能不在char类型数值范围内,而int->char的自动类型转换采用截尾的方式,即对int取256的余数;
3.scanf(“%d,%d”,…)的第二个整型需要遇到‘,’字符才能开始开始读取,若找不到则跳过该整型的读取。

0 0
原创粉丝点击