c语言——输入方式gets,scanf,fgets分析

简介: 我们使用最广泛的输入方式应该是scanf函数,scanf可输入的数据类型范围广,使用便捷。但其也不乏缺陷,而且某些时候使用gets和getchar会更加高效。

我们使用最广泛的输入方式应该是scanf函数,scanf可输入的数据类型范围广,使用便捷。但其也不乏缺陷,而且某些时候使用gets和getchar会更加高效。

先来说说scanf

scanf属于stdio.h函数库,支持多种数据类型(整型,浮点型,字符型,指针...),经常和输出函数printf一起使用,使用的最为广泛。

在这里想要强调的是scanf的弊端:

1.向scanf中输入内容时,最后按下的回车键将会被保留在缓冲区内。有些时候这个留下的回车会影响到程序正常运行,通常用getchar()或者scanf(“%c”)......将回车吸收


2.scanf读入内容的时候,如果你输入了空格或者回车,后续内容将不会被读入。如下程序

#include<stdio.h>intmain()
{
chara[12];
scanf("%s",a);
printf("%s",a);
return0;
}

输入“i love you”,输出结果为“i”。证明第一个空格以后所有内容都没被读入。


但是gets函数不会出现第二种情况,gets中输入的空格将会被读入。下面我们来介绍gets函数

gets

gets函数只用于读入字符或者字符串(非要读整型数也可以,可能会警告甚至error),经常和puts()搭配使用。

使用格式如下

chara[5];
gets(a);
puts(a);

gets函数以回车键为结束标志,并且会把这个回车键读入然后替换成\0,不会遗留在缓冲区内,这点可以弥补scanf第一点不足。


而且gets函数可以正常读入空格,弥补了scanf第二点不足。


当然gets自身也有不足,gets不会检查输入内容,可能会出现缓冲区溢出越界等问题。这时候可以利用fgets函数弥补这点不足。


fgets

fgets函数和gets函数有相似部分:用于输入字符串。是的,fgets只能用于输入字符数组,不能用于整型等等。相应的它和fputs函数配套使用。


使用格式如下

chara[10];
fgets(a,10,stdin);
fputs(a, stdout)fgets函数的参数有三个:数组名,下标,stdinstdin就是指从键盘获取字符

dgets可以检查是否溢出,比gets更加安全

相关文章
|
20天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
49 1
|
2月前
|
C语言
初识C语言:与计算机的交流之输入与输出(scanf和printf)
初识C语言:与计算机的交流之输入与输出(scanf和printf)
218 0
|
3月前
|
C语言
【C语言基础考研向】05 scanf读取标准输入超详解
本文详细解析了C语言中`scanf`函数的工作原理及常见问题。首先介绍了`scanf`如何处理标准输入,并通过示例说明了为何有时会出现阻塞现象及其解决办法。接着探讨了当输入包含多种数据类型时,特别是字符型数据的处理方式,强调了格式控制的重要性,并给出了正确的输入格式示例。通过正确配置,可以避免因空格和换行符导致的问题,确保数据准确读取。
107 10
|
3月前
|
存储 C语言
【C语言基础考研向】10 字符数组初始化及传递和scanf 读取字符串
本文介绍了C语言中字符数组的初始化方法及其在函数间传递的注意事项。字符数组初始化有两种方式:逐个字符赋值或整体初始化字符串。实际工作中常用后者,如`char c[10]=&quot;hello&quot;`。示例代码展示了如何初始化及传递字符数组,并解释了为何未正确添加结束符`\0`会导致乱码。此外,还讨论了`scanf`函数读取字符串时忽略空格和回车的特点。
106 8
|
3月前
|
存储 Serverless C语言
【C语言基础考研向】11 gets函数与puts函数及str系列字符串操作函数
本文介绍了C语言中的`gets`和`puts`函数,`gets`用于从标准输入读取字符串直至换行符,并自动添加字符串结束标志`\0`。`puts`则用于向标准输出打印字符串并自动换行。此外,文章还详细讲解了`str`系列字符串操作函数,包括统计字符串长度的`strlen`、复制字符串的`strcpy`、比较字符串的`strcmp`以及拼接字符串的`strcat`。通过示例代码展示了这些函数的具体应用及注意事项。
214 7
|
3月前
|
C语言
C语言程序设计核心详解 第三章:顺序结构,printf(),scanf()详解
本章介绍顺序结构的基本框架及C语言的标准输入输出。程序从`main()`开始依次执行,框架包括输入、计算和输出三部分。重点讲解了`printf()`与`scanf()`函数:`printf()`用于格式化输出,支持多种占位符;`scanf()`用于格式化输入,需注意普通字符与占位符的区别。此外还介绍了`putchar()`和`getchar()`函数,分别用于输出和接收单个字符。
|
4月前
|
存储 缓存 编译器
【C语言篇】scanf和printf万字超详细介绍(基本加拓展用法)(下篇)
scanf处理⽤⼾输⼊的原理是,⽤⼾的输⼊先放⼊缓存,等到按下回⻋键后,按照占位符对缓存进⾏解读。 解读⽤⼾输⼊时,会从上⼀次解读遗留的第⼀个字符开始,直到读完缓存,或者遇到第⼀个不符合条件的字符为⽌。
188 2
|
4月前
|
存储 C语言
【C语言篇】scanf和printf万字超详细介绍(基本加拓展用法)(上篇)
printf 的作⽤是将参数⽂本输出到屏幕。它名字⾥⾯的 f 代表 format (格式化),表⽰可以定制输出⽂本的格式。
93 1
|
C语言
c语言中scanf()、printf()函数
  函数调用scanf(“%d”,  &weight) 包含两个参数:“%d” 和&weight。C用逗号来隔开函数调用中的多个参数; 但是printf()和scanf()函数比较特殊,其函数数目可以不受控制。
871 0
|
17天前
|
存储 C语言 开发者
【C语言】字符串操作函数详解
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
39 10