由于函数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.
分享到:
相关推荐
第一个问题是`scanf`在遇到非法字符时停止读取,这可以通过先存储输入为字符串,然后遍历字符串进行判断来解决。第二个问题是无法直接对字符串进行大小比较,通过`atoi`函数可以将字符串转换为整型,从而进行比较。 ...
这样,当用户输入非法字符时,程序会提示错误并清除输入缓冲区,防止影响后面的输入处理。 总结以上,这些猜数游戏程序不仅涵盖了C语言的基本控制结构(如`if`、`while`循环),还涉及到随机数生成、输入输出处理等...
5. 错误处理:在用户输入不合法或出现计算错误时,程序应能适当地捕获和处理这些错误,比如非法字符、除数为零等。 6. 循环与分支结构:通过`for`、`while`循环和`if`、`else`语句来实现控制流,使得计算器可以按照...
本节介绍从标准输入设备—键盘上输入数据的函数scanf和getchar。 scanf函数 scanf函数称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。 一、scanf函数的一般形式 scanf函数是一个标准...
9. **字符输入的特殊处理**:使用`%c`格式输入字符时,包括空格和转义字符都会被读入。如果只需要读取单个字符,输入连续的字符会被当作多个字符处理。 10. **数据类型与格式说明符不匹配**:确保输出时使用正确的...
7. 错误处理:在实验中,都需要考虑错误输入的情况,比如输入的不是有效的运算符、非法的日期格式等,这时就需要添加适当的错误检查和提示。 8. 数据类型的使用:实验四中,需要处理字符输入,因此需要了解字符数据...
3. 声明必要的全局变量和函数,例如用于存储用户输入的字符串变量,以及处理运算的函数声明。 4. 在`main()`函数内,设计用户界面交互逻辑,例如通过`scanf()`或`fgets()`读取用户输入的表达式。 5. 对输入的表达式...
这份专升本计算机软件基础模拟题试卷主要涵盖了C语言的基础知识,包括标识符规则、数字表示、程序执行逻辑、数组的使用、输入输出格式、函数调用、指针操作、字符串处理等方面。以下是这些知识点的详细说明: 1. **...
为了提高健壮性,还需要添加错误处理和输入验证,防止非法数据输入。 9. **安全性与效率**: 实际项目中,应考虑输入验证以防止缓冲区溢出等安全问题,以及优化代码以提高效率,例如,使用动态内存分配和链表代替...
而`scanf()`函数的返回值表示成功读取的数据项数,如果输入非法,返回值为0。检查`scanf()`的返回值可以帮助验证用户输入的有效性。 在输入精度控制上,`scanf()`可以利用星号`*`来指定宽度,例如`%*.*f`,在示例...
因此,A是保留关键字,B是合法的,C包含非法字符,D也包含非法字符。 4. 模块化编程:C语言通过函数实现模块化,每个函数完成特定的任务,便于代码重用和维护。选项A指的是基本结构,B是数据类型丰富性,C是函数,D...
在C语言编程过程中,经常会遇到各种错误,这些错误可以分为语法错误、逻辑错误和运行时错误等几类。...在编程过程中,细心检查和使用合适的调试工具是非常重要的,这有助于及时发现和修复这些问题,从而提高代码质量。
C编译的程序对语法检查并不象其它高级语言那么严格,这就给编程人员留下“灵活的余地”,但还是由于这个灵活给程序的调试带来了许多不便,尤其对初学C语言的人来说,经常会出一些连自己都不知道错在哪里错误。...
选项A和B错误,因为不能对常量使用`scanf`,也不能无输入项。选项C虽然可以正常工作,但不是标准做法,因为格式控制部分不应规定小数点后的位数。 7. **C语言的表达式语法** 表达式`a+=a-=(b=4)*(a=3)`是合法的,...
嵌入式C编程中的流程控制是程序设计的基础,它决定了代码如何执行和处理不同条件下的任务。流程控制包括三种基本构造:顺序流程、分支流程和循环流程。 1. **顺序流程**是最简单的流程控制,按照代码行的顺序依次...
- 错误处理:对用户输入进行有效性检查,遇到非法数据或异常情况时,给出友好提示。 6. **课程设计说明书**: 完成设计后,需要提交课程设计说明书,详述设计思路、主要界面截图、技术实现要点和个人总结。说明书...
- 错误处理:通过条件判断和异常处理机制来捕获和处理可能的错误,如非法输入或不符合规则的出牌。 6. 多线程或并发:在更高级的应用中,可能需要考虑多线程技术,让每个玩家可以在单独的线程中思考和出牌,提高...
以上知识点涵盖了C语言的基础语法,包括标识符规则、数据类型、程序流程控制、数组、字符串处理、函数调用、输入输出以及基本的算法应用。在专升本的计算机软件基础考试中,考生需要熟练掌握这些概念和技巧。
这可以通过字符串处理和比较函数完成。 4. **输入合法性验证**:如果用户输入的表达式非法,返回步骤1。可以使用正则表达式或自定义函数进行合法性验证。 5. **表达式求值**:如果用户输入的是一个合法的中缀...
11. 错误输入处理:当输入9876543210时,scanf函数会尝试解析负数,但输入的不是负数格式,因此a、b、c的值不确定,只有c=4321.000000是正确的。答案是C。 12. 格式化输出:printf语句会输出%d的格式字符串,而不是...