`
hengxing2009
  • 浏览: 89110 次
  • 性别: 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.
分享到:
评论

相关推荐

    c语言输入字符串数组四组输入字符串数组

    printf("输入错误,字符串%d包含非法字符。\n", i); break; } } ``` 使用`isalnum()`函数判断字符是否为字母或数字,如果不是,提示用户输入错误。 4. **设置默认值**: 在用户未输入新值时,可以为字符串...

    第3章 键盘输入与屏幕输出-2数据的格式化键盘输入.pptx

    - 为了确保程序的健壮性,通常需要对`scanf()`的返回值进行检查,并在出现错误时采取适当的措施,如显示错误信息,重新请求输入等。 通过以上知识点,我们可以编写更健壮的程序,处理用户输入数据时能更有效地防止...

    根据用户的输入判断输入的合法性

    例如,可以包裹输入操作在一个 `try-catch` 块中,当输入非法时抛出一个异常。 7. **用户反馈**: 程序应当提供清晰的用户反馈,告知用户输入为何无效以及如何修正。这可以通过 `std::cerr` 输出错误信息或者弹出...

    C语言输入控制函数函数

    - 拒绝非法输入:如果用户输入的数据与指定的格式不符,`scanf()`将不会改变接收变量,并且会留下未读取的输入。需要谨慎处理这种情况,避免程序陷入无限循环。 了解并熟练掌握这些输入控制函数,将使你在C语言编程...

    输入输出专题

    在IT领域,C语言是一种基础且重要的编程语言,它的强大在于对系统级操作的直接控制,包括输入输出处理。输入输出是程序与用户交互的基本方式,理解和熟练掌握C语言的输入输出机制对于任何C程序员来说都至关重要。在...

    130易雪1

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

    非常好用的C语言控制输入封装

    然而,这些函数在处理输入时存在一定的风险,例如缓冲区溢出、非法字符处理不当等问题。因此,对输入进行封装,可以提供更好的错误处理机制,增强程序的健壮性。 二、封装的必要性 1. 错误处理:原始的输入函数...

    16进制转字符vc编写

    std::cerr 输入包含非法字符!" ; return 1; } } // 转换为整数 int hexValue = std::stoi(hexInput, nullptr, 16); // 转换为字符 char asciiChar = static_cast(hexValue); // 输出字符 std::cout ...

    一个控制输入的例子

    本程序还涉及如何排除非法字符,特别是字母。这是通过检查每个输入字符是否为数字来实现的。非数字字符会导致程序要求用户重新输入。 #### 三、代码详解 1. **头文件导入**: ```c #include ``` 导入标准输入...

    c语言编程题及答案.doc

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

    基于C.API的简易计算器源代码.zip

    6. **错误处理**:良好的程序设计需要考虑错误处理,比如处理除以零的情况,或者用户输入非法字符。这通常通过设置和检查错误标志来实现。 7. **循环结构**:如果计算器允许连续计算,那么可能会使用循环结构(如`...

    1到10的英文单词

    在C语言中,`scanf()`可能会因为非法输入(如非数字字符)而失败,因此需要检查输入是否成功。 下面是一个简单的示例代码,展示了如何解决这个问题: ```c #include #include #include #define MAX_NUM 10 ...

    c语言打字母游戏源码.zip

    9. **错误处理**:良好的程序应该能够处理预期之外的情况,比如用户输入非法字符或游戏卡死。源码中可能会有异常处理和错误报告的机制。 10. **结构体和联合体**:如果游戏状态复杂,可能会定义结构体来封装相关的...

    C语言计算器开发小例

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

    计算器 用C语言实现

    8. **错误处理**:计算器应该能处理各种无效输入,如非法字符、除以零等错误。我们需要设置适当的错误处理机制,比如返回错误代码或显示错误信息。 在实际编码过程中,我们可能需要编写一个主函数(main)来初始化...

    第9章 字符串 (1).ppt

    在C语言中,可以使用标准输入输出库函数`scanf`和`printf`处理字符串。例如,`scanf("%s", str)`用于从键盘输入字符串到`str`数组,`printf("%s", str)`则用于输出字符串。 6. 字符串数组与字符串处理函数: 字符...

    C语言程序设计标准教程

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

    c代码-while(scanf("%d%d", &i, &j) == 2) 和 while(~scanf("%d%d",&a,&b)) 的差别

    在实际编程中,为了更好地处理用户输入和异常情况,通常会使用更复杂的方法来读取数据,例如使用`fgets()`配合`sscanf()`,或者分步读取并检查每一步的正确性。这种方法可以更有效地处理错误,防止因输入不完整或...

    头歌c语言实验之IP地址无效化.zip

    这个实验可能还包括一些测试用例,以检查学生的代码能否正确处理各种边缘情况,如空字符串、全零IP(0.0.0.0)、全255 IP(255.255.255.255)以及包含非法字符的IP地址。 总之,"头歌c语言实验之IP地址无效化"是一...

    C语言计算器源码(带登录验证)

    - 输入输出:使用`scanf`和`printf`处理用户输入和程序输出,但要小心空格和换行符对输入的影响。 - 编程风格:遵循一定的编码规范,使代码易于阅读和维护。 - 错误检查:在关键位置添加错误检查代码,以防止程序...

Global site tag (gtag.js) - Google Analytics