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

笔者习惯于用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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值