侵权投诉

基于C语言中scanf函数的3种常见问题的原因分析和解决方法

2018-01-22 12:34 次阅读

在写代码时总是不小心在这里犯错,所以特意查了一下这个函数,并且做以整理,现分享给大家。

1.空白符问题

#include

main()

{   

int a;

printf("input the data ");

scanf("%d ",&a);//这里多了一个回车符

printf("%d",a);

return 0;

}

结果要输入两个数程序才结束,而不是预期的一个。why?

原因:用空白符结尾时,scanf会跳过空白符去读下一个字符,所以你必须再输入一个数。这里的空白符包括空格,制表符,换行符,回车符和换页符。所以如果你用scanf("%d  ",&a)也会出现同样的问题。

解决方法:这种错误大多是输入的时候不小心,多注意一点就好了。这种问题也不好检查,编译没有问题,一个空格也不容易看出来。当你的程序出现上面的问题时,自己对照检查一下就可以了。
基于C语言中scanf函数的3种常见问题的原因分析和解决方法

2.回车符也占位。

#include

main()

{

int n = 5;

char c[n];

for(int i = 0; i < n; i++)

c[i] = scanf("%c",&c[i]); 

printf(c);

return 0;

}

如果输入:

a

b

c

那么循环就会“提前”结束了。

原因:输入a和第一个回车后,a和这个回车符都留在缓冲区中。第一个scanf读取了a,但是输入缓冲区里面还留有一个 ,第二个scanf读取这个 。然后输入b和第二个回车,同样的,第三个scanf读取了b,第四个scanf读取了第二个回车符。第五个读取了c。所以五个scanf都执行了,并没有提前结束。只不过有的scanf读取到了回车符而已。

解决方法:

1.不输入回车符,直接输入字符。

2.用gets()函数,如:

#include

main()

{   

char c[5];

gets(c);

printf(c);

return 0;

}

3.scanf()函数的参数输入类型不匹配问题

这是我在百度时见到的问题,还没遇到。拿来整理,以备日后需要。

#include

main()

{

int a=123;

char c='t';

printf("input ");

scanf("%d%c",&a,&c);

scanf("%d%c",&a,&c);

scanf("%d%c",&a,&c);

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

return 0;

}

当输入a 回车 后,会直接跳过下面2个scanf语句,直接输出为

123

t

原因:对于scanf("%d%c",&a,&c),scanf语句执行时,其中有一个参数不匹配,那就从这个地方跳出,忽略这个scanf后面所有的参数,而去执行下一条语句。 

解决方法:scanf()函数执行成功时的返回值是成功读取的变量数,也就是说,你这个scanf()函数有几个变量,如果scanf()函数全部正常读取,它就返回几。但这里还要注意另一个问题,如果输入了非法数据,键盘缓冲区就可能还个有残余信息问题。

比如:

#include

main()

{

int a=123,b;

while(scanf("%d%d",&a,&b)!=2)

fflush(stdin);

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

return 0;

}

还有个办法:只要用scanf("%[^ ]",strings); 就可以了。很神奇吧。还要注意方括号两侧都不能加空格。

原文标题:C语言中scanf函数的3种常见问题与应对技巧

文章出处:【微信号:mcuworld,微信公众号:嵌入式资讯精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

如何给C语言增加几个位操作函数

在汇编语言中有直接对位进行操作的指令,如置位、复位、位取反、测试某一位等,这对于硬件操作十分方便,在C语言中尽管也提供了...
发表于 07-14 18:15 105次 阅读
如何给C语言增加几个位操作函数

C语言的几种位操作运算

在汇编语言中有直接对位进行操作的指令,如置位、复位、位取反、测试某一位等,这对于硬件操作十分方便,在C语言中尽管也提供了...
发表于 07-14 18:14 94次 阅读
C语言的几种位操作运算

嵌入式软件开发ARM中断实验的报告资料说明

一、实验目的(1)、学会使用 Embest IDE 编写简单的 C语言程序并进行调试;(2)、了解不....
发表于 07-14 16:42 9次 阅读
嵌入式软件开发ARM中断实验的报告资料说明

PyTorch 1.6即将原生支持自动混合精度训练

即将在 PyTorch 1.6上发布的 torch.cuda.amp 混合精度训练模块实现了它的承诺....
的头像 中科院长春光机所 发表于 07-14 16:06 67次 阅读
PyTorch 1.6即将原生支持自动混合精度训练

单片机C语言延时程序的注意事项

标准的C语言中没有空语句。但在单片机的C语言编程中,经常需要用几个空指令产生短延时的效果。这在汇编语....
发表于 07-14 11:13 17次 阅读
单片机C语言延时程序的注意事项

单片机C语言代码编写技巧

下面发一些我在网上看到的单片机C语言代码编写技巧和自己的一些经验来和大家分享;
发表于 07-14 11:02 34次 阅读
单片机C语言代码编写技巧

C语言的进阶学习课件资料合集

本文档的主要内容详细介绍的是C语言的进阶学习课件资料合集包括了:第1节-数据的存储,第2节-指针的进....
发表于 07-14 08:00 16次 阅读
C语言的进阶学习课件资料合集

临界代码保护异常taskENTER_CRITICAL怎么办

用STM32CubeMX生成的代码,然后学习临界代码保护。 进入临界后调用了osDelay(5000)延时5秒,然后再退出临界保护。然后发...
发表于 07-13 10:36 17次 阅读
临界代码保护异常taskENTER_CRITICAL怎么办

LCD1602驱动为什么把字符代码写入DDRAM?

一般来说,LCD1602有16条引脚,据说还有14条引脚的,与16脚的相比缺少了背光电源A(15脚)....
发表于 07-13 10:06 55次 阅读
LCD1602驱动为什么把字符代码写入DDRAM?

Keil uVision4的使用详解教程概述

单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为 CPU 可以执行的机器码有....
发表于 07-13 08:00 17次 阅读
Keil uVision4的使用详解教程概述

分享 郭天祥 十天学会C语言和51单片机视频教程+代码

郭天祥 郭天祥 十天学会C语言和51单片机 详细教程源码 回复可得 链接:https://pan.baidu.com/s/1uWWpG-o_EVscRZ3ys...
发表于 07-12 21:31 94次 阅读
分享 郭天祥 十天学会C语言和51单片机视频教程+代码

如何把C++的源程序改写成C语言

由于C++解释器比C语言解释器占用的存储空间要大500k左右。为了节省有限的存储空间,降低成本,同时也为了提高效率,将用C+...
发表于 07-11 09:34 825次 阅读
如何把C++的源程序改写成C语言

关于ARM的三种中断调试方法介绍

在整个流程中,用户首先需要建立工程并对工程做初步的配置,包括配置处理器和配置调试设备。编辑工程文件,....
发表于 07-10 16:01 51次 阅读
关于ARM的三种中断调试方法介绍

使用C语言写出的九九乘法表

本文档的主要内容详细介绍的是使用C语言写出的九九乘法表资料合集免费下载。
发表于 07-10 08:00 26次 阅读
使用C语言写出的九九乘法表

Python的基本知识和特点及功能详细说明

这一章主要介绍一下Python的基本知识,包括什么是Python、Python的特点以及功能,通过阅....
发表于 07-09 16:43 26次 阅读
Python的基本知识和特点及功能详细说明

由浅入深的一步步迭代出无锁队列的实现原理

什么是队列,顾名思义,就类似于超市面前排起的一个队伍,当最前面的顾客买完了东西,后面的顾客整体向前移....
的头像 玩转单片机 发表于 07-09 09:25 102次 阅读
由浅入深的一步步迭代出无锁队列的实现原理

C语言之结构体的声明与定义

我们刚刚申请了一个名叫Info的结构体类型,那么理论上我们可以像声明其他变量的操作一样,去声明我们的....
的头像 玩转单片机 发表于 07-09 09:06 171次 阅读
C语言之结构体的声明与定义

如何把C++的源程序改写成C语言

由于C++解释器比C语言解释器占用的存储空间要大500k左右。为了节省有限的存储空间,降低成本,同时也为了提高效率,将用C+...
发表于 07-08 20:51 288次 阅读
如何把C++的源程序改写成C语言

OpsMind宣布完成由德联资本投资的数千万元Pre-A轮融资

目前,OpsMind 已服务于数十家企业客户,覆盖广告传媒、移动游戏、电商流通、企业服务、传统金融等....
的头像 真格基金 发表于 07-08 15:54 349次 阅读
OpsMind宣布完成由德联资本投资的数千万元Pre-A轮融资

单片机C语言程序设计的详细资料

C语言目前己成为电子工程师进行单片机系统开发时的常用编程语言。用C语言来编写目标系统软件,会大大缩短....
发表于 07-07 14:48 66次 阅读
单片机C语言程序设计的详细资料

使用Java实现扫雷游戏的代码免费下载

本文档的主要内容详细介绍的是使用Java实现扫雷游戏的代码免费下载。
发表于 07-07 08:00 16次 阅读
使用Java实现扫雷游戏的代码免费下载

基于自主核心可见光人脸识别算法技术的“人证合一”系统解决方案

自动返回结果,含人脸ID、比对分值、时间、照片,任何时间都可以复查导出或打印日志,便于事后复查核实。
的头像 我快闭嘴 发表于 07-04 10:44 435次 阅读
基于自主核心可见光人脸识别算法技术的“人证合一”系统解决方案

浅谈2020年六大主流编程语言

目前,计算机语言的总数总计达9000种。但是,其中只有50种编程语言是较为流行的。今天,小编就给大家....
的头像 如意 发表于 07-03 11:36 386次 阅读
浅谈2020年六大主流编程语言

单片机教程之C语言的程序设计说明

C51是在标准C的基础上,根据单片机存储器硬件结构及内部资源,扩展了相应的数据类型和变量,而C51在....
发表于 07-02 17:45 59次 阅读
单片机教程之C语言的程序设计说明

c语言宏定义的使用方法

当宏作为常量使用时,C程序员习惯在名字中只使用大写字母。但是并没有如何将用于其他目的的宏大写的统一做....
发表于 07-02 15:04 106次 阅读
c语言宏定义的使用方法

C语言二级指针的用法与原理

提到指针,我们都知道指针是用来存储一个变量的地址。所以,当我们定义了一个指向指针的指针的时候(poi....
发表于 07-02 14:52 113次 阅读
C语言二级指针的用法与原理

HW资料华-为硬件(硬件开发C语言PCB设计天线通信)

链接:https://pan.baidu.com/s/1HFxkb4O1jAZvCEccWVcd4w 提取码:stns 回复可见提取码,资源需求可加q1051514663 ...
发表于 07-01 18:20 95次 阅读
HW资料华-为硬件(硬件开发C语言PCB设计天线通信)

C语言和PHP,新手选择哪个比较好?

计科专业从事嵌入式开发多年,从现在的市场行情以及就业的机会上讲php的就业空间还是大于C语言,但并不....
的头像 如意 发表于 07-01 16:15 157次 阅读
C语言和PHP,新手选择哪个比较好?

Python的发展趋势,未来可期

首先,当前Python作为一门流行程度比较高的全场景编程语言,在IT互联网行业和一部分传统行业已经有....
的头像 如意 发表于 07-01 10:19 282次 阅读
Python的发展趋势,未来可期

如何使用MPLAB代码配置器配置增强型PWM模块

本视频在之前实验的基础上,继续向大家介绍如何使用MPLAB代码配置器配置增强型PWM模块,并使用生成....
的头像 Microchip视频 发表于 07-01 10:07 322次 观看
如何使用MPLAB代码配置器配置增强型PWM模块

如何通过星号编写Python代码的最佳方式

Python以句法简单、简洁而闻名,只需掌握简单的英语就能理解其代码。对初学者来说极具吸引力,它没有....
的头像 如意 发表于 07-01 09:58 184次 阅读
如何通过星号编写Python代码的最佳方式

怎么样才能在Keil C51环境下实现64位浮点库的设计

为解决Keil C51环境下无法进行64位双精度计算的问题,采用分部存储和分部计算的方法,设计了在K....
发表于 07-01 08:00 22次 阅读
怎么样才能在Keil C51环境下实现64位浮点库的设计

怎么样才能使用Keil C51开发大型嵌入式程序

 结合在8051系列单片机平台上的实际开发应用的经验,介绍用 Keil C在8051单片机上进行大型....
发表于 07-01 08:00 22次 阅读
怎么样才能使用Keil C51开发大型嵌入式程序

如何配置EUSART异步模式并实现EUSART发送

在之前实验的基­础上,继续介绍如何配置EUSART异步模式,并使用生成的代码实现EUSART发送­.
的头像 Microchip视频 发表于 07-01 00:03 318次 观看
如何配置EUSART异步模式并实现EUSART发送

不一样的WINCC---脚本程序学习

在脚本中编写VB脚本代码。可以象使用系统函数一样使用项目中完成的脚本。创建脚本时,确定其型号并定义传....
的头像 机器人及PLC自动化应用 发表于 06-30 17:17 161次 阅读
不一样的WINCC---脚本程序学习

详谈选择排序算法的定义和过程

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数....
的头像 如意 发表于 06-30 17:06 112次 阅读
详谈选择排序算法的定义和过程

亚马逊发布Honeycode,无代码开发环境的更好解决方案

亚马逊副总裁 Augustin 表示:开发这项服务旨在将亚马逊提供的开发功能扩展到客户群中的更多用户....
的头像 牵手一起梦 发表于 06-30 14:27 353次 阅读
亚马逊发布Honeycode,无代码开发环境的更好解决方案

C语言模拟实现memmove函数

memmove用于从src拷贝count个字节到dest,如果目标区域和源区域有重叠的话,memmo....
的头像 如意 发表于 06-29 17:53 124次 阅读
C语言模拟实现memmove函数

C语言模拟实现memcpy函数

memcpy指的是c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起....
的头像 如意 发表于 06-29 17:29 201次 阅读
C语言模拟实现memcpy函数

ISD4002语音录放电路的设计C语言程序免费下载

  本文档的主要内容详细介绍的是ISD4002语音录放电路的设计C语言程序免费下载。
发表于 06-29 17:20 21次 阅读
ISD4002语音录放电路的设计C语言程序免费下载

简易LCD示波器设计的C语言程序免费下载

本文档的与内容详细介绍的是简易LCD示波器设计的C语言程序免费下载。
发表于 06-29 17:20 34次 阅读
简易LCD示波器设计的C语言程序免费下载

液晶GPS定位信息显示器的设计C语言程序免费下载

本文档的主要内容详细介绍的是液晶GPS定位信息显示器的设计C语言程序免费下载。
发表于 06-29 17:20 42次 阅读
液晶GPS定位信息显示器的设计C语言程序免费下载

超声波测距器设计的C语言程序免费下载

本文档的主要内容详细介绍的是超声波测距器设计的C语言程序免费下载。
发表于 06-29 17:20 42次 阅读
超声波测距器设计的C语言程序免费下载

远程电话控制器设计的C语言程序免费下载

本文档的主要内容详细介绍的是远程电话控制器设计的C语言程序免费下载。
发表于 06-29 17:20 40次 阅读
远程电话控制器设计的C语言程序免费下载

C语言模拟实现strcmp函数

C语言模拟实现strcmp函数
的头像 如意 发表于 06-29 16:51 227次 阅读
C语言模拟实现strcmp函数

C语言模拟实现strstr函数

strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数....
的头像 如意 发表于 06-29 16:36 388次 阅读
C语言模拟实现strstr函数

C语言模拟实现strcat函数

C语言模拟实现strcat函数
的头像 如意 发表于 06-29 16:18 195次 阅读
C语言模拟实现strcat函数

C语言模拟实现strcpy

strcpy是一种C语言的标准库函数,strcpy把从src地址开始且含有’\0’结束符的字符串复制....
的头像 如意 发表于 06-29 15:54 159次 阅读
C语言模拟实现strcpy

C语言模拟实现strlen的步骤

strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是....
的头像 如意 发表于 06-29 15:48 176次 阅读
C语言模拟实现strlen的步骤

图文详解:数组和指针的传参

数组传参时,会退化为指针,所以我们先来看看什么是退化!
的头像 如意 发表于 06-29 15:34 162次 阅读
图文详解:数组和指针的传参

详谈C语言和C++的区别和联系

在学习了C语言和C++之后,这两者之间的区别我们需要仔细的捋一捋!
的头像 如意 发表于 06-29 14:56 122次 阅读
详谈C语言和C++的区别和联系

单片机程序开发的语言怎么选择

单片机程序的开发可以使用的两种语言,分别是C语言和汇编语言。这里要指出的一件事是,这不是嵌入式单片机....
的头像 电子魔法师 发表于 06-29 11:22 353次 阅读
单片机程序开发的语言怎么选择

JavaSE的基础教程讲解

Java确实是从C语言和C++语言继承了许多成份,甚至可以将Java看成是类C语言发展和衍生的产物。....
发表于 06-29 08:00 18次 阅读
JavaSE的基础教程讲解

Python基础教程第三版PDF电子书免费下载

《Python基础教程 第3版》包括Python程序设计的方方面面:首先,从Python的安装开始,....
发表于 06-29 08:00 122次 阅读
Python基础教程第三版PDF电子书免费下载

3D数学基础图形与游戏开发PDF电子书免费下载

 本书主要研究隐藏在3D几何世界背后的数学问题。3D数学是一门与计算几何相关的学科,计算几何则是研究....
发表于 06-29 08:00 76次 阅读
3D数学基础图形与游戏开发PDF电子书免费下载

使用STC单片机实现AT2402外部EEPROM的应用代码免费下载

本文档的主要内容详细介绍的是使用STC单片机实现AT2402外部EEPROM的应用代码免费下载。
发表于 06-28 18:00 35次 阅读
使用STC单片机实现AT2402外部EEPROM的应用代码免费下载

C语言精华知识:表驱动法编程实践

根据字典中的部首检字表查找读音未知的汉字就是典型的表驱动法,即以每个字的字形为依据,计算出一个索引值....
的头像 玩转单片机 发表于 06-28 17:10 203次 阅读
C语言精华知识:表驱动法编程实践

大学生如何学习FPGA初学者怎么学FPGA

无论是从自身的发展,还是从FPGA所拥有的巨大市场来讲,学习FPGA都是一个不错的选择,对大家来说FPGA技术可能还是新...
发表于 06-23 15:12 296次 阅读
大学生如何学习FPGA初学者怎么学FPGA

10个常用的代码简缩写的技术,看懂一种就算入门,全部看懂是大神了

人工智能时代,python编程语言站在风口起飞,2018年7月的世界编程语言排行榜跃居于编程语言前三,2018年的IEEE顶级编程语言交...
发表于 06-19 18:24 658次 阅读
10个常用的代码简缩写的技术,看懂一种就算入门,全部看懂是大神了

从架构的角度看如何写好代码 + 我的思考

架构漫谈(八):从架构的角度看如何写好代码 + 我的思考...
发表于 06-18 06:16 37次 阅读
从架构的角度看如何写好代码 + 我的思考