再看C语言输入

C语言——输入输出 所谓输入输出是以计算机为主机而言的,往内存中输入数据为输入,反之从内存中输出数据为输出。 阅读详情
    一、我最开始接触C时是从printf和scanf开始的。在用到scanf时,我总是小心翼翼的按照自己既定的规则来进行输入。若不小心输入错误的话程序就会得到错误的结果或者直接崩溃了,遇到这种情况也就只有从新运行程序并按照“正确”的方式,全部从新输入一次。
    针对上面出现的两种情况主要由两个原因引起的:
1、输入并不匹配函数 int fscanf(FILE *fp, char *format, ...) 或 int scanf(const char *format, ...) 中format所指定的输入格式。
2、输入数据超过而溢出而覆盖其他内存区域。
    二、下面详细介绍一下出现上面两种问题的原因,及相应的解决方法。
情况1:输入格式不匹配:
如:
int i;
scanf("%d",&i);
输入内容:c
    上述scanf函数执行的结果并没有从标准输入中读取数据放在i所在内存地址。根据K&R C 对scanf描述:"
It returns when  format is exhausted.  fscanf returns EOF  if end of file or an error occurs before any conversion; otherwise it returns the number of input items converted and assigned."
    因此scanf函数执行完会返回0。所以我们可以通过对scanf返回值的判断来判定输入格式的正确性。在下面的例子中我们通过scanf_int_decimal函数来实现对输入函数scanf执行结果的判断来确定输入格式的正确与否,函数中scanf("%*[^\n]")和scanf("%*c")用来清空因为错误输入而滞留在输入流stdin中的数据。
#include<stdio.h>
#include<string.h>
int main()
{
	void scanf_int_decimal(int *p,const char *format);
	int i;
	printf("Input value for i:\n");
	scanf_int_decimal(&i,"%d");
	return 0;
}
void scanf_int_decimal(int *p,const char *format)
{
	int n;
	while((n = scanf(format, p)) != 1)
	{
		scanf("%*[^\n]");
		scanf("%*c");
		printf("Incorrect format, Input again:\n");
	}
}
情况2:输入数据过多造成溢出:
    如:
char buf[10];
scanf("%s",buf);
    输入内容:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,即大于buf的大小。在下面的例子中我们在read_line函数中实现了限定了上限的字符数据输入,在未达到输入上限时去除了输入的换行符'\n',在输入数据超过上限时我们只读取规定了的最大长度,并清空多余的滞留在stdin流中的数据。
#include<stdio.h>
#include<string.h>
int main()
{
	char buf[10];
	char *read_line(FILE *, char *, char *, unsigned int);
	read_line(stdin, "Input string:", buf, 10);
	return 0;
}

char *read_line(FILE *fp, char *prompt, char *buff, unsigned int n)
{
	char *p;
	printf("%s",prompt);
	fflush(stdout);
	if(p = fgets(buff, n, fp))
	{
		int last = strlen(buff) - 1;
		if(buff[last] == '\n')
			buff[last] = '\0';
		else
		{
			scanf("%*[^\n]");
			scanf("%*c");
		}
	}
	return p;
}


c语言 结构体的输入输出_C语言的控制结构和输入输出 c语言 结构体的输入输出Control Structure in C defines how the statements in the program are going to execute. A statement is a single line or instruction in a program. C中的控件结构定义了程序中的语句将如何执行。 语句是程序中的单行或指令。 C语言的... 阅读详情

相关推荐

交通银行金融科技后端开发实习生面试经验

笔试之路的第一个脚印。不足的地方:基本功不扎实,得补。先补sql(先整理出一篇sql语句做题的文章,争取下次笔试拿下这一块),编程题中的SQL写不出来感觉很丢人。然后补八股文,结合一些网上项目教程,来理解常用的一些八股文(比如各种锁)。

T__TSZ的博客 1724

c语言scanf程序无法继续,scanf停不住,程序继续执行

该楼层疑似违规已被系统折叠隐藏此楼查看此楼#defineNULL0#defineLENsizeof(structstudent)#include"stdio.h"structstudent{intnum;floatscore;structstudent*next;};intn;structstudent*creat(){structstudent*head;str...

weixin_42566424的博客 1043

LK32T102 单片机 操作GPIO实现流水灯(1)

前言: LK32T10232(32位)单片机是一款专为电机控制器和数字电源开发的高性能 MCU。采Cortex-M0 内核,最高工作频率可达 72Mhz,ADC 采样速率 达 1Msps。同时具备协处理器单元可满足各种乘法、除法、移位以及各种 复杂函数运算。 LK32T102(32位)支持单电源供电,且内嵌高精度高速及低速振荡器,以及具备 多种低功耗工作模式。同时,集成了多路增强型 PWM,多通道模拟比较 器和高速运算放大器,可满足多种电机及功率控制应用,并简化系统成本。...

qq_58676187的博客 3189

编写命令解释器(二)

我们在之前的sh的基础上再添加进一些shell的功能。 先让sh可以一次性接收一整串的命令(程序名及参数),而不是一次一个的按照提示输入。这就需要一个函数将输入作为一个大数组储存起来,再打散存入arglist中。char **splitline(char *line){ //line即为输入所存入的大数组 char *cp = line; int a

leilixu的专栏 714

Unity热更实战:用YooAsset+HybridCLR实现小游戏资源与代码双更新(含避坑清单)

本文详细介绍了Unity小游戏开发中如何通过YooAsset与HybridCLR实现资源与代码双热更新方案。内容涵盖环境配置、架构设计、微信小游戏专项优化、热更代码工程化实践及真机调试技巧,帮助开发者解决审核周期长、紧急修复等痛点,提升更新效率与稳定性。

weixin_42520025的博客 501

华为防火墙双线路配置实战:5分钟搞定主备自动切换(含健康检查避坑指南)

本文详细介绍了华为防火墙双线路配置实战,包括主备自动切换和健康检查机制的优化技巧。通过智能健康检查机制,华为防火墙能实现毫秒级故障自动切换,确保网络高可用性。文章提供了从架构设计到实战配置的全流程指南,并分享了常见配置误区与解决方案,帮助中小企业快速搭建稳定可靠的网络架构。

weixin_30872337的博客 604

13 smsh——编写自己的shell

1、什么是shell脚本语言 Unix的引导程序和很多管理程序都使用shell脚本,shell是一个变成语言解释器,这个解释器解释从键盘输入的命令,也解释存储在脚本中的命令序列。shell脚本是一个包含一系列命令的文件。运行一个脚本就是运行这个文件中的每个命令。可以用一个shell脚本在一次请求中来执行多个命令。 shell脚本中元素:命令、变量、用户输入、控制、环境。 2、smsh1.c 对自编shell的第一个改进是添加命令行解析的功能。比如:find /home -name core -mti

Revendell的博客 1395

人工智能,不止于模型:四步实现完整工作流

工程师越来越多地致力于将人工智能 (AI) 集成到自己的项目和应用中,同时不断着力提升自己的 AI 技能。面对 AI 问题,工程师首先要了解什么是 AI,以及如何将它纳入当前工作流,这看似简单,实则未必容易。在 Google 中搜索“什么是 AI?”会得到数百万条结果,包括不同程度的技术和相关信息。那么,对工程师而言,AI 意味着什么?人们对 AI 的关注主要集中在 AI 模型上,受此影响,工程师会迅速投入 AI 建模的研究。

r1832644594的博客 2814

【C语言】多组输入

该文通过做题举例的方式,让我们可以更好的理解多组输入,代码和注释以及运行图可以让我们更加清晰的理解多组输入。

幾微的学习博客 1万+

基于matlab的主成分分析的人脸二维码识别系统

人脸识别因其在系统安全验证、信用验证、刑侦跟踪、身份管理、视频会议、人机交互、智能家居等方面的巨大应用前景,成为当前模式识别和人工智能领域越来越热门的一个研究方向。随着安全入口控制和二维码智能扫描应用需求的快速增长,基于二维码识别的生物人脸统计识别技术也引起了人们的重视。本案例将详细讲解基于主成分分析的人脸特征提取的原理与方法,并将其与 QR 二维码的编解码进行结合,将 MATLAB 作为工具平台,调用 QR 二维码编解码应用程序,进而实现一个人脸二维码自动识别的系统原型。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 977

数字电视中的AD(Audio Description)音频描述技术详解

AD(Audio Description)音频描述是一种辅助技术,旨在帮助视障人士更好地理解视觉内容。通过在节目或视频的自然停顿处插入额外的语音叙述来解释屏幕上的视觉信息,如人物动作、场景变化、文字说明等,从而让视力受损的人士也能获得完整的观影体验。AD服务不仅限于电视广播,也广泛应用于电影、剧院表演、在线视频平台等领域。PID:用于标识和区分不同的音频流。PMT表:提供每个音频流的详细信息,包括PID、编解码器类型和语言代码。时间戳:PTS和DTS用于同步音频与视频内容。解复用。

以实战经验介绍行业知识 741

在C语言中实现只输入数字的一种方法

在C语言中实现只输入数字的一种方法前言《C语言程序设计》的策略氮四!我的想法总结 前言 最近在学习苏小红等教授主编的《C语言程序设计》,书本在6.4(条件控制的循环)一节中,通过让学习者通过不断完善一个猜数游戏进行学习。 在完善的过程中书本采用了一种方法,使程序在用户输入不合法数据类型时报错。 但笔者在实际运行时发现书本的方法存在局限性。经过思考笔者想出了一种不超出书本第六章内容的一种改良方法。 《C语言程序设计》的策略 书中使用了如下的代码实现提示错误信息、清除非法字符、重新输入数据的功能: int re

weixin_50952196的博客 1万+

42、InfiniBand技术详解:QP状态机、操作及错误处理

本文深入解析InfiniBand技术中的核心组件QP(Queue Pair)状态机、工作请求处理机制、支持的操作类型及错误处理策略。详细介绍了QP的创建与状态转换流程,包括INIT、RTR、RTS等关键状态,并提供了状态修改的代码示例。文章还探讨了工作请求的发布、资源使用限制、围栏机制以及重试和RNR流程,帮助开发者理解通信可靠性保障机制。此外,涵盖了多播组的应用场景与API使用方法,并对比了用户空间与内核级RDMA API的调用差异,最后给出了实践建议和常见问题解答,为构建高性能分布式系统提供技术指导。

oauth7security的博客 131

c语言中字符串中输入空格,C语言输入带空格的字符串

因为:scanf("%s",str); 遇到空格就停止接收后面的字符。scanf("%s",str,10);不能接收带空格的字符串输入,虽然它的指定长度是10, 但是遇到空格时即使没有满10个字符它也自动结束输入了。所以:1.用 gets() 可以读取空格, 直到回车才会结束输入char str[80];gets(str); //可以读取空格, 回车才会结束输入2.使用"%[^\n]"可...

weixin_36329939的博客 2万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C语言如何输入一个字符串?

如何输入一个字符串

Jambo!的博客 2万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C语言如何判断输入结束

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录为什么要判断输入是否结束一、输入函数自带的结束标志二、自定义结束标志符三、利用输入函数的返回值做结束标志1.Windows系统中键入EOF**“行首”、“Ctrl-Z组合键”、“↙”**2.Linux系统中键入EOF 为什么要判断输入是否结束 首先,C语言是借助于相应的缓冲区来进行输入、输出操作的。 比如常用的输入输出函数scanf、printf、getchar、putchar、gets、puts函数,都是从缓冲区读取输入数据的,并不

miye15664742579的博客 2万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C语言的多组输入

用C语言实现多组输入 实现多组输入代码 while(n--){ scanf("");} 代表规定数量 whlie(scanf("%d",&n)!=EOF) 代表不等于空置的连续输入 while(scanf("%d",n),n!=0) 代表连续输入直到输入0为止。 对于多组输入进行实践 题目描述 期末考试快要到了,但是每个同学学的科目太多啦。学校为了给同学们早点放假回家,让同学在自己所学...

qmqm33的博客 1万+

常用c语言输入语句,c语言输入 C语言如何输入语句

标准的输入输出是人机交互的基础,下面,小编为大家讲述C语言中的输入函数scanf用法,希望能够帮到您!1、scanf函数是C语言提供的标准输入函数,其作用是从终端键盘上读入数据。调用的一般格式如下所示:scanf(格式控制,输入项1,输入项2,输入项3...)其中格式控制主要作用是指定输入时的数据转换格式,即格式转换字符。输入项之间用逗号隔开。在变量之前必须添加&符号(注:在C语言中,&a...

weixin_31455121的博客 2407

C语言-连续输入问题(小白必看)

C语言的连续输入有三种: 1.while(~scanf("%d %d",&a,&b)) 其中,~是按位取反,-1的十六进制补码表示为0xffffffff,f是二进制的1111,取反后全部变为0,于是while结束,并且只有返回值为EOF(即-1)时,其取反值才为0,while循环才能结束。 例子: // 第一种连续输入 #include<stdio.h> int main(){ int a,b; while(~scanf("%d %d",&a,&b)){

tonyhapply的博客 2万+

C语言的输入输出

简略的介绍c语言简单的输入输出方式

Johnny-He的博客 4万+

C语言实现循环输入

C语言实现循环输入 声明:本人也是刚刚开始搞C语言的萌新,如有纰漏还请各位大佬谅解 一 根据次数循环输入 根据循环次数输入 ​ 首先输入循环次数,然后可进行多次输入,注意:循环条件是n --,而不是 – n;具体区别是n --的值是n,而-- n的值是n-1,这样导致-- n的循环次数会少1; #include <stdio.h> int main(int argc, char const *argv[]) { int n; int w; scanf("%d", &n);

Arkhangelsk_的博客 2万+

C语言输入和输出

文章目录一、数据输入二、数据输出三、断章取义四、printf输出1、输出描述性的文字2、输出整数3、输出字符4、输出浮点数5、输出字符串6、输出多个内容7、示例(book12.c)五、scanf输入1、输入整数2、输入字符3、输入浮点数4、输入字符串5、输入多个内容6、示例(book13.c)六、注意事项七、课后作业八、版权声明 一、数据输入 编写程序的主要目的就是为了处理数据。数据从哪里来?数据...

C语言实战技术 5183

c语言怎么从键盘输入坐标,C语言从键盘输入数据

程序是人机交互的媒介,有输出必然也有输入。在C语言中,有多个函数可以从键盘获得用户输入:scanf():和 printf() 类似,scanf() 可以输入多种类型的数据。getchar()、getche()、getch():这三个函数都用于输入单个字符。gets():获取一行数据,并作为字符串处理。scanf() 是最灵活、最复杂、最常用的输入函数,但它不能完全取代其他函数,大家都要有所了解。s...

weixin_36216477的博客 6154

c语言输入语句

若c语言输入语句为如下格式: scanf(“%d%d”,&a,&b); 输入a,b的值时使用空格分开或是使用换行(回车) 若输入语句为如下格式: scanf(“%d,%d”,&a,&b); 输入a,b的值时必须使用“,”隔开,否则编译器没有错误,结果有误。 例子:计算整数的四则运算: #include<stdio.h> int main(...

qq_38988221的博客 1万+

多组输入(C语言)

多组输入 在平时写题的过程中,常常会有多组输入的要求,所以这里将对我常使用的多组输入方法总结一下。 当已知要多组输入的数据组数时: 方法一: #include <stdio.h> int main() { int t,a; scanf("%d\n",&t);//这里t为要输入数据的组数 while(t--) { scanf("%d",&a); printf("%d ",a); } return 0;

weixin_51788994的博客 2万+

c语言输入输出

c语言无I/O语句,I/O操作由函数实现:格式:putchar(c)参数:c为字符常量、变量或表达式功能:把字符c输出到显示器上返值:正常,为显示的代码值打开帮助手册,发现putchar里面是int 类型的字符,int里面认为的是ASCII码值,为什么不是char类型的,因为char类型的变量是-128~127范围而ASCII码的是0~255。格式:printf(“格式控制串”,输出表)功能:按指定格式向显示器输出数据输出表:要输出的数据格式控制串:包含两种信息。

m0_46584536的博客 4924
上一篇: Vim中利用OmniCppComplete实现C++代码自动补全
下一篇: NAND FLASH vs NOR FLASH
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值