`
hengxing2009
  • 浏览: 87182 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

关于scanf对输入非法字符的检查和处理

阅读更多
由于函数scanf(),不做参数类型的匹配检查,因此,用户输入数据类型与格式字符不符合时,编译程序并不给出提示错误信息,然而却导致不能正确输入数据!

#include <stdio.h>

main()

{int a,b;

printf("input a:");

scanf("%d",&a);

printf("a=%d",a);

printf("input b:");

scanf("%d",&b);

printf("b=%d",b);
}

第一次测试程序时运行结果:

input a:1.4

a=1

input b:b=3129

第二次运行结果

input a:q

a=64

input b:b=3129——————————————————

怎样解决这个问题?

看下面程序:

#include <stdio.h>

int main(int argc, char* argv[])
{
int a,b,ret;
printf("Input a:");
ret=scanf("%d",&a);
if(ret==0)    //遇到非法字符的输入
{
   printf("Input data type error!\n");
    fflush(stdin);//清除输入缓冲区的错误数据
}
else if(ret==EOF)//scanf调用失败
{
   printf("Input failure occurs!\n");
}
else
{
   printf("a=%d\n",a);
}

    printf("Input b:");
ret=scanf("%d",&b);
if(ret==0)
{
   printf("Input data type error!\n");
    fflush(stdin);
}
else if(ret==EOF)
{
   printf("Input failure occurs!\n");
}
else
{
   printf("b=%d\n",b);
}
return 0;
}
解决这个问题,我们可以考虑检验函数scanf()调用返回值的方法。如果函数scanf()调用成功的话,则其返回值为已成功读入的数据项数。通常非法字符的输入会导致数据不能成功读入。如果scanf()调用失败,则返回EOF,通常是无数据可读是才会发生这种情况,例如,当标准输入被重定向到一个输入文件时,程序执行函数scanf()就是从该文件中读入数据,当读到文件尾没有数据可读时,函数scanf()调用就会失效,如果用户按F6键强制输入结束,此时测试函数scanf()的返回值也是EOF.
分享到:
评论

相关推荐

    130易雪1

    第一个问题是`scanf`在遇到非法字符时停止读取,这可以通过先存储输入为字符串,然后遍历字符串进行判断来解决。第二个问题是无法直接对字符串进行大小比较,通过`atoi`函数可以将字符串转换为整型,从而进行比较。 ...

    c语言编程题及答案.doc

    这样,当用户输入非法字符时,程序会提示错误并清除输入缓冲区,防止影响后面的输入处理。 总结以上,这些猜数游戏程序不仅涵盖了C语言的基本控制结构(如`if`、`while`循环),还涉及到随机数生成、输入输出处理等...

    C语言计算器开发小例

    5. 错误处理:在用户输入不合法或出现计算错误时,程序应能适当地捕获和处理这些错误,比如非法字符、除数为零等。 6. 循环与分支结构:通过`for`、`while`循环和`if`、`else`语句来实现控制流,使得计算器可以按照...

    C语言程序设计标准教程

    本节介绍从标准输入设备—键盘上输入数据的函数scanf和getchar。 scanf函数 scanf函数称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。 一、scanf函数的一般形式 scanf函数是一个标准...

    C语言编程易犯错误集

    9. **字符输入的特殊处理**:使用`%c`格式输入字符时,包括空格和转义字符都会被读入。如果只需要读取单个字符,输入连续的字符会被当作多个字符处理。 10. **数据类型与格式说明符不匹配**:确保输出时使用正确的...

    第4章选择结构程序设计借鉴.pdf

    7. 错误处理:在实验中,都需要考虑错误输入的情况,比如输入的不是有效的运算符、非法的日期格式等,这时就需要添加适当的错误检查和提示。 8. 数据类型的使用:实验四中,需要处理字符输入,因此需要了解字符数据...

    实训一计算器编程的实现.doc

    3. 声明必要的全局变量和函数,例如用于存储用户输入的字符串变量,以及处理运算的函数声明。 4. 在`main()`函数内,设计用户界面交互逻辑,例如通过`scanf()`或`fgets()`读取用户输入的表达式。 5. 对输入的表达式...

    专升本计算机软件基础模拟题试卷.pdf

    这份专升本计算机软件基础模拟题试卷主要涵盖了C语言的基础知识,包括标识符规则、数字表示、程序执行逻辑、数组的使用、输入输出格式、函数调用、指针操作、字符串处理等方面。以下是这些知识点的详细说明: 1. **...

    C语言学生成绩管理系统.docx

    为了提高健壮性,还需要添加错误处理和输入验证,防止非法数据输入。 9. **安全性与效率**: 实际项目中,应考虑输入验证以防止缓冲区溢出等安全问题,以及优化代码以提高效率,例如,使用动态内存分配和链表代替...

    C语言自学笔记

    而`scanf()`函数的返回值表示成功读取的数据项数,如果输入非法,返回值为0。检查`scanf()`的返回值可以帮助验证用户输入的有效性。 在输入精度控制上,`scanf()`可以利用星号`*`来指定宽度,例如`%*.*f`,在示例...

    复习题11

    因此,A是保留关键字,B是合法的,C包含非法字符,D也包含非法字符。 4. 模块化编程:C语言通过函数实现模块化,每个函数完成特定的任务,便于代码重用和维护。选项A指的是基本结构,B是数据类型丰富性,C是函数,D...

    C语言常见错误,绝对对你有用

    在C语言编程过程中,经常会遇到各种错误,这些错误可以分为语法错误、逻辑错误和运行时错误等几类。...在编程过程中,细心检查和使用合适的调试工具是非常重要的,这有助于及时发现和修复这些问题,从而提高代码质量。

    C语言常见错误——写给编程初学者

    C编译的程序对语法检查并不象其它高级语言那么严格,这就给编程人员留下“灵活的余地”,但还是由于这个灵活给程序的调试带来了许多不便,尤其对初学C语言的人来说,经常会出一些连自己都不知道错在哪里错误。...

    广西区计算机等级二级C试题.pdf

    选项A和B错误,因为不能对常量使用`scanf`,也不能无输入项。选项C虽然可以正常工作,但不是标准做法,因为格式控制部分不应规定小数点后的位数。 7. **C语言的表达式语法** 表达式`a+=a-=(b=4)*(a=3)`是合法的,...

    嵌入式C编程流程控制(“循环”文档)共40张.pptx

    嵌入式C编程中的流程控制是程序设计的基础,它决定了代码如何执行和处理不同条件下的任务。流程控制包括三种基本构造:顺序流程、分支流程和循环流程。 1. **顺序流程**是最简单的流程控制,按照代码行的顺序依次...

    c语言专业课程设计ktv点歌系统.doc

    - 错误处理:对用户输入进行有效性检查,遇到非法数据或异常情况时,给出友好提示。 6. **课程设计说明书**: 完成设计后,需要提交课程设计说明书,详述设计思路、主要界面截图、技术实现要点和个人总结。说明书...

    斗地主C语言源代码草版.doc

    - 错误处理:通过条件判断和异常处理机制来捕获和处理可能的错误,如非法输入或不符合规则的出牌。 6. 多线程或并发:在更高级的应用中,可能需要考虑多线程技术,让每个玩家可以在单独的线程中思考和出牌,提高...

    专升本计算机软件基础模拟题试卷.doc

    以上知识点涵盖了C语言的基础语法,包括标识符规则、数据类型、程序流程控制、数组、字符串处理、函数调用、输入输出以及基本的算法应用。在专升本的计算机软件基础考试中,考生需要熟练掌握这些概念和技巧。

    C语言做一个24点游戏的程序

    这可以通过字符串处理和比较函数完成。 4. **输入合法性验证**:如果用户输入的表达式非法,返回步骤1。可以使用正则表达式或自定义函数进行合法性验证。 5. **表达式求值**:如果用户输入的是一个合法的中缀...

    全国计算机等级考试二级教程之《C语言程序设计》课后题及参考答案.pdf

    11. 错误输入处理:当输入9876543210时,scanf函数会尝试解析负数,但输入的不是负数格式,因此a、b、c的值不确定,只有c=4321.000000是正确的。答案是C。 12. 格式化输出:printf语句会输出%d的格式字符串,而不是...

Global site tag (gtag.js) - Google Analytics