C Primer Plus(6) 中文版 第8章 字符输入/输出和输入验证 8.6 输入验证

本文介绍如何在C程序中进行输入验证,包括处理非负整数输入和错误类型的值。通过示例代码展示如何使用scanf()和getchar()函数处理输入错误,确保用户输入的是有效整数并在指定范围内。
摘要由CSDN通过智能技术生成

8.6 输入验证
在实际应用中,用户不一定按照程序的指令形式。因此,作为程序员,除了完成编程的本职工作,还要实现预料一些可能的输入错误,这样才能写出能检测并处理这些问题的程序。
处理非负整数的循环,但是用户很可能输入一个负数。你可以使用关系表达式来排除这种情况:
long n; //获取第1个值
scanf( "%ld", &n ); //检测不在范围内的值
while( n >= 0 ){
    //处理n
    scanf( "%ld", &n ); //获取下一个值 

另一个潜在的陷阱是,用户可能输入错误类型的值,如字符q。排除这种情况的一种方法是,检查scanf()的返回值。scanf()返回成功读取项的个数。因此,下面的表达式当且仅当用户输入一个整数时才为真:
scanf( "%ld", &n ) == 1
结合上面的while循环,可改进为:
long n; //获取第1个值
while( scanf( "%ld", &n ) == 1 && n >= 0 ){
    //处理n
    scanf( "%ld", &n ); //获取下一个值 

while循环条件可以描述为“当输入是一个整数且该整数为正时”。
对于最后的例子,当用户输入错误类型的值时,程序结束。然后,也可以让程序友好些,提示用户再次输入正确类型的值。在这种情况下,要处理有问题的输入。如果scanf()没有成功读取,就会将其留在输入队列中。这里要明确,输入起始是字符流。可以使用getchar()函数逐字符地读取输入,甚至可以把这些想法都结合在一个函数中,如下所示:
long get_long( void ){
    long input;
    char ch;
    while( scanf( "%ld", &input) != 1 ){
        while( (ch = getchar()) != '\n' ){
            putchar( ch ); //处理错误的输入 
        }
        printf( " is not a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_40186813

你的能量无可限量。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值