再学C语言46:字符串输入(2)
创始人
2025-05-31 18:08:21
0

gets()函数的不足:不检查预留存储区是否能够容纳实际输入的数据,多出来的字符简单地溢出到相邻的内存区

一、fgets()函数

fgets()函数改进gets()函数的上述不足,可以指定最大读入字符数

fgets()函数为文件I/O而设计,与gets()函数有3点不同:

1)需要第二个参数以说明最大读入字符数,若该参数为n,fgets()将读取最多n-1个字符

2)如果fgets()函数读取到换行符,会将其存储到字符串中,而不是像gets()函数那样丢弃

3)还需要第三个参数以说明读取哪一个文件,如果是从键盘上读取数据,可以使用stdin(代表standard input)作为该参数,stdin在stdio.h中定义

示例代码:

/* test of fgets() function */
#include #define MAXC 20int main(void)
{char name[MAXC]; // 分配空间char * p;printf("I need a name:\n");p = fgets(name, MAXC, stdin); // 使用fgets()函数从键盘获得字符串,函数共3个参数printf("%s is a nice name.\n", p); // 显示,确认读取数据return 0;
}

运行结果:

4cde4072c705452294808cd7d278a4f6.png

注意:fgets()函数把换行字符也存储到了字符串中

对于重要的编程,应该使用fgets()而不是gets(),因为gets()不检查目标数组是否能够容纳输入,所以很不安全

二、scanf()函数

scanf()更基于获取单词而不是字符串

gets()函数会读取所有字符,直到遇到第一个换行符为止

scanf()函数使用两种方式决定输入结束:

1)如果使用%s格式,字符串读到(但不包括)下一个空白字符(空格、制表符、换行符)

2)如果指定字段宽度,比如%10s,scanf()会读入10个字符或只到遇到第一个空白字符,由二者中最先满足的那个终止输入

无论上面哪种方法,scanf()读取字符串时都是以遇到的第一个非空白字符开始

scanf()函数返回一个整数值,该值代表成功读取的项目数;或者当遇到文件结束时返回一个EOF

示例代码:

/* test of scanf() function */
#include int main(void)
{char name_1[20], name_2[20];int n;printf("I need 2 names:\n");n = scanf("%6s %10s", name_1, name_2);printf("the %d names are %s and %s", n, name_1, name_2);return 0;
}

运行结果:

945c817a1ddd403799a19af73cac0423.png


根据所需输入的特点,用gets()从键盘读取文本可能更好,简洁、易用,唯一需要注意的问题是数据大小不能超出存储区大小

scanf()主要用于以某种标准形式输入的混合类型数据的读取和转换;或者希望一次只输入一个单词

 

 

上一篇: 工程造价实习周记

下一篇: 培训通知

相关内容

热门资讯

罗素名言 罗素名言69句  1、伟大的事业是根源于坚韧不断的工作,以全付精神去从事,不避艰苦。——罗素  2、...
朋友的名人名言 有关朋友的名人名言汇总  在学习、工作、生活中,大家都不可避免地会接触并使用名言吧,名言可以用来鞭策...
乔布斯名言经典摘抄 乔布斯名言经典摘抄  乔布斯出生于美国加利福尼亚州旧金山,美国发明家、企业家、美国苹果公司联合创办人...
夺眶而出的名言名句 关于夺眶而出的名言名句  这里是郁郁葱葱的山神之森,一定,要有一段时间无法再盼望夏天了,心如刀绞,泪...
信仰名言 精选关于信仰名言  关于信仰名言  1、没有信仰的人如同盲人(弥顿)  2、有信仰未必能成大事,而没...
告诉自己珍惜时间的名言名句 志士惜年,贤人惜日,圣人惜时,告诉自己珍惜时间的名言名句。圣人都珍惜时间,我们凡人更要珍惜时间。下面...
工匠精神的名人名言 关于工匠精神的名人名言  1、最佳的创新定义是“不限大小,不限部门”。 最有效的创新都简单得惊人,其...
青春奋斗的名言警句 关于青春奋斗的名言警句1、青春是美妙的,挥霍青春就是犯罪,关于青春奋斗的名言警句。——萧伯纳  2、...
理想的阶梯 理想的阶梯理想的阶梯[教学目标]1.通过学习本文,使学生懂得“奋斗,是实现理想的阶梯”这一道理,并能...
激励的名言警句 激励的名言警句50句  大家都听过哪些激励的话呢?还记得吗?下面,小编为大家分享激励的名言警句,希望...
清明节家风家训的名言 清明节家风家训的名言  家风不仅是民风社风的组成要素,也是中华民族传统价值观的重要组成部分,各位,我...
英文爱情电影名言 英文爱情电影名言1) i love you not because of who you are, ...
霸气青春励志名言英语短句 霸气青春励志名言英语短句  青春是美好的时光,也是很重要的时光,下面unjs小编整理了霸气青春励志名...
文化的名言 关于文化的名言  文化是一种社会现象,是人们长期创造形成的产物,同时又是一种历史现象,是社会历史的积...
每日英语励志名言 每日一句英语励志名言  1、 No one can walk backward into the f...
感谢老师的成语和名言 感谢老师的成语和名言  春风化雨  有教无类  平易近人  古道热肠  十年树木,百年树人  作育英...
孝老敬亲的名人名言 关于孝老敬亲的名人名言  泱泱中华,礼义之邦,道德传统,源远流长。敬老孝老,是我们的传统美德,是我们...
庄子的名言名句 有关庄子的名言名句  庄子的思想包含着朴素辩证法因素,主要思想是“天道无为”,认为一切事物都在变化,...
积极乐观态度的名人名言 关于积极乐观态度的名人名言  在平日的学习、工作和生活里,大家都不可避免地会接触并使用名言吧,名言是...
励志名言短句霸气八字   学海无涯,心存高远!下面是小编整理的励志名言短句霸气八字,欢迎阅读!  与朋友交,言而有信。  ...