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
C Primer Plus(6) 中文版 第8章 字符输入/输出和输入验证 8.6 输入验证
最新推荐文章于 2024-10-18 16:22:39 发布
本文介绍如何在C程序中进行输入验证,包括处理非负整数输入和错误类型的值。通过示例代码展示如何使用scanf()和getchar()函数处理输入错误,确保用户输入的是有效整数并在指定范围内。
摘要由CSDN通过智能技术生成