`
deepfuture
  • 浏览: 4398145 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:80056
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:70000
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:103300
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:285640
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:15001
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:67502
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:32101
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:45965
社区版块
存档分类
最新评论

c-scanf键盘缓冲区残余信息问题

阅读更多

键盘缓冲区残余信息问题 

#include <stdio.h>
int main()
{
    int a;
    char c; 
    do
    {
        scanf("%d",&a);
        scanf("%c",&c);
        printf("a=%d     c=%c\n",a,c);
        /*printf("c=%d\n",c);*/
    }while(c!=''N'');

   scanf("%c",&c);这句不能正常接收字符,什么原因呢?我们用printf("c=%d\n",c);将C用int表示出来,启用printf("c=%d\n",c);这一句,看看scanf()函数赋给C到底是什么,结果是 c=10 ,ASCII值为10是什么?换行即\n.对了,我们每击打一下"Enter"键,向键盘缓冲区发去一个“回车”(\r),一个“换行"(\n),在这里\r被scanf()函数处理掉了(姑且这么认为吧^_^),而\n被scanf()函数“错误”地赋给了c. 
解决办法:可以在两个scanf()函数之后加个fflush(stdin);,还有加getch(); getchar();也可以,但是要视具体scanf()语句加那个,这里就不分析了,读者自己去摸索吧。但是加fflush(stdin);不管什么情况都可行。 
函数名: fflush 
功 能: 清除一个流 
用 法: int fflush(FILE *stream); 
#include <stdio.h>
int main()
{
    int a;
    char c; 
    do
    {
        scanf("%d",&a);
        fflush(stdin);
        scanf("%c",&c);
        fflush(stdin);
        printf("a=%d     c=%c\n",a,c); 
    }while(c!=''N'');
}      
这里再给一个用“空格符”来处理缓冲区残余信息的示例: 
运行出错的程序: 
#include <stdio.h>
int main()
{
    int i;
    char j;
    for(i = 0;i < 10;i++)
    {
        scanf("%c",&j);/*这里%前没有空格*/
    }

使用了空格控制符后: 
#include <stdio.h>
int main()
{
    int i;
    char j;
    for(i = 0;i < 10;i++)
    {
        scanf(" %c",&j);/*注意这里%前有个空格*/
    }

    可以运行看看两个程序有什么不同。 

分享到:
评论

相关推荐

    深入理解scanf函数输入时键盘缓冲区

    scanf 函数是 C 语言中最基本的输入函数之一,但是在实际使用中,很多开发者对其输入机制和键盘缓冲区的理解不够深入,本文将从基础知识开始,逐步深入讲解 scanf 函数的输入机制、键盘缓冲区的数据形式、缓冲区的...

    scanf的应用1-scanf

    scanf scanf scanf scanf scanf

    git-analyze-scanf

    git Analyze tool [Cross Platform] scanf scanf scanf scanf scanf

    C语言清空输入缓冲区在标准输入(stdin)情况下的使用

    C语言清空输入缓冲区在标准输入(stdin)情况下的使用 C语言中,输入缓冲区是指标准输入(stdin)中的缓冲区,当用户输入数据时,数据会先存储在缓冲区中,然后再被读取和处理。但是,如果不正确地清空输入缓冲区,...

    结合C语言缓冲区谈scanf()函数

    在C语言中,`scanf()`函数是一个常用的输入函数,它具有缓冲区机制。当我们调用`scanf()`时,程序会检查输入缓冲区是否有待处理的数据。如果缓冲区为空,那么程序会等待用户从键盘输入数据。用户输入的每一个字符会...

    C语言输入缓冲区完全攻略!

    在C语言中,当用户通过标准输入设备(如键盘)输入数据时,这些数据首先会被暂存于内存的一个特定区域,这一区域通常被称为**键盘输入缓冲区**,简称**输入缓冲区**或**输入流**。这种设计的主要目的是为了提高效率...

    C语言的 scanf 详细用法

    `scanf`函数是C语言中用于从标准输入设备(通常是键盘)读取格式化输入的一种方法。它非常适用于需要从用户那里获取特定格式的数据的情况。下面我们将详细解释`scanf`函数的各种用法。 #### 一、基本格式与说明 `...

    C语言scanf用法及有用技巧

    - 当`scanf`函数无法正确读取数据时,可以通过`fflush(stdin)`清除输入缓冲区来避免后续读取出现问题。 通过以上示例和技巧的学习,可以更好地掌握`scanf`函数的使用方法,并能在实际编程中灵活运用。

    C语言中scanf函数使用需要注意的问题(绝对经典)

    摘 要:本文从scanf 函数使用的多个方面(格式字符及其附加格式说明字符、输入数据的格式、格式说明的分隔符、输入项的使用、格式说明与输入项的对应)介绍scanf函数使用的方法及其注意事项,以使读者正确、有效地...

    Linux运维-嵌入式物联网开发教程-C语言的scanf函数.mp4

    Linux运维-嵌入式物联网开发教程-C语言的scanf函数.mp4

    修改版--支持全正则表达式的ssanf_s---cscanf

    和`scanf_s`一样,`ssanf_s`也考虑了安全性,避免了缓冲区溢出的问题。如果匹配失败或遇到其他错误,函数会立即停止读取并返回错误代码,帮助开发者定位问题。 4. **cscanf函数扩展** `cscanf`则是对`scanf`的...

    零基础入门C语言-王桂林 -v2-.pdf

    例如,书中讲解了如何使用printf和scanf函数进行格式化输出和输入,并讨论了输入输出缓冲的问题。还提到了类型转换的两种形式:隐式转换和强制转换,并通过练习题来加深理解。 在C语言的运算符与表达式部分,作者...

    C语言中scanf函数使用时的常见问题.pdf

    C语言中scanf函数是进行数据输入的基础,它来源于C标准库函数,具备强大的输入功能,但在实际使用时若不当心,可能会导致错误或非预期结果。VC++6.0环境下的例子将用于说明在使用scanf函数时常见的问题及其解决方法...

    C语言编程中scanf函数的详细用法

    在C语言编程中,`scanf`函数是标准输入库中的一个关键函数,用于从标准输入设备(通常是键盘)读取数据。它具有广泛的应用,包括读取整数、浮点数、字符、字符串等。本篇文章将深入探讨`scanf`函数的详细用法,以及...

    嵌入式系统/ARM技术中的嵌入式学习笔记(2)--scanf使用常见问题及解决方法

    总之,`scanf()` 在嵌入式系统开发中虽然简单易用,但也需要注意其潜在的问题,尤其是在处理用户输入时,必须谨慎处理缓冲区的管理以及防止内存溢出。通过合理使用格式说明符和通配符,可以有效避免这些问题,确保...

    C语言入门例程-模拟键盘打字键盘敲击背景声中逐个输出字符

    这个名为"C语言入门例程-模拟键盘打字键盘敲击背景声中逐个输出字符"的项目,旨在为初学者提供一个有趣的实践平台,帮助他们更好地理解和掌握C语言的基础知识。下面我们将详细探讨这个例程所涵盖的关键知识点。 ...

    浅析C语言中scanf()函数的用法.pdf

    从键盘输入的数据先放在键盘缓冲区中,直到按下回车键,键盘缓冲区中的数据输入到程序中的输入数据。 七、示例程序 通过三个示例程序,展示了scanf()函数的正确用法和常见错误。例如,一个简单的scanf()函数的使用...

    C语言程序设计中的缓冲区溢出问题

    ### C语言程序设计中的缓冲区溢出问题 #### 背景介绍 缓冲区溢出是一种常见的安全漏洞,尤其在C语言程序设计中尤为突出。C语言作为一种强大的、灵活的编程语言,在系统软件开发和应用软件开发中都有广泛应用。但...

    C语言 中scanf详解.pdf

    `fflush(stdin)`常被用来试图清空输入缓冲区,但这种方法在C标准中并未定义,其效果依赖于实现。在某些编译器下,`fflush(stdin)`可能无效,甚至导致未定义的行为。因此,正确处理输入残留通常需要通过其他方式,如...

    C语言-- 图书管理系统.zip

    【标题】"C语言-- 图书管理系统.zip" 是一个基于C语言实现的图书管理系统的源代码包。这个项目旨在提供一个简单的平台,用于图书馆或个人书籍的管理,包括书籍的添加、删除、查询和借阅等功能。通过学习和分析这个...

Global site tag (gtag.js) - Google Analytics