C语言输入语句scanf与fgets linux下
1、测试使用scanf的一个例子:
#include "stdio.h"
#include "string.h"
int main()
{
char name[10];
scanf("%s", name);
puts(name);
return 0;
}
编译、调用如下:
可以看到第二次,由于输入的字符串长度,导致Abort
2、同样的一个fgets的例子:
#include "stdio.h"
#include "string.h"
int main()
{
char name[10];
fgets(name, 10, stdin);
puts(name);
return 0;
}
编译、调用如下:
并没有像scanf那样出现Abort的情况,而是对字符串进行了截断
3、对比scanf和fgets:
a) scanf不限制用户的输入,导致会出现上面测试例子的Abort
fgets限制用户的输入,超过之后进行截断字符串的操作,避免了Abort,但是要设置一个缓冲区长度值
b) scanf可以使用诸如scanf("%d/%d", &x, &y),这样的形式,让用户只需要输入1/3便可以分别得到x、y的值:
#include "stdio.h"
int main()
{
int x;
int y;
scanf("%d/%d", &x, &y);
printf("x value : %d, y value : %d\n", x, y);
return 0;
}
但是fgets,无论如何,每次都只能读入一个变量,而且只能是字符串(毕竟说是str嘛!),像下面这样的形式,编译是通不过的:
#include "stdio.h"
int main()
{
int x;
fgets(x, sizeof(x), stdin);
printf("x value : %d", x);
return 0;
}
c)字符串中的空格
scanf用%s接收字符串的时候,遇到空格就会停止。如果想输入多个单词,需要多次调用scanf()
fgets()直接接收字符串中的空格
4、总结
由于3提到的一些区别,所以在使用scanf()和fgets()的时候,要注意情况。
转载于:https://blog.csdn.net/zengraoli/article/details/19540153
C语言输入语句scanf与fgets linux下的更多相关文章
- C语言实现—学生成绩管理系统(Linux下运行)
开发环境:Linux 开发语言:C 相关文件下载: 码云:https://gitee.com/ikaros-521/c_project/tree/master/%E5%AD%A6%E7%94%9F%E ...
- 【转】Go语言入门教程(一)Linux下安装Go
说明 系统是Ubuntu. 关于安装 下载安装包 当前官方下载地址是https://golang.org/dl/,如果不能访问,请自行FQ,FQ是技术工作者的必备技能. 安装 tar -xzvf go ...
- Linux C编程之一:Linux下c语言的开发环境
---恢复内容开始--- 今天开始根据Linux C编程相关视频的学习所做的笔记,希望能一直坚持下去... 1.开发环境的构成 编辑器:VI: 编译器:选择GNU C/C++编译器gcc: 调试器: ...
- Linux 下LNMP环境搭建_【all】
LNMP = Linux + Nginx + Mysql + PHP 1.0 Linux环境搭建 Linux 系统安装[Redhat] 1.1. FastCGI介绍 1.什么是CGI(common g ...
- Linux 下安装 jdk压缩包
按 esc 退出 记得 输入 :q 记得 : Linux下安装jdk 把压缩文件放在 桌面的soft 下 在usr目录下新建文件夹Java,把文件复制到 usr/java 更改下路径! 3 ...
- linux下串口通信与管理
linux下的串口与windows有一些区别,下面将介绍一下linux下串口通信管理 查看是否支持USB串口: #lsmod | grep usbserial 如果没有信息:sudo apt-get ...
- C语言中最常用的三种输入输出函数scanf()、printf()、getchar()和putchar()
本文给大家介绍C语言中最常用的三种输入输出函数scanf().printf().getchar()和putchar(). 一.scanf()函数格式化输入函数scanf()的功能是从键盘上输入数据,该 ...
- 简记清空C语言输入残留内容
为了在命令行程序中实现和用户的交互,我们编写的程序的运行过程中往往涉及到对标准输入/输出流的多次读写. 在C语言中接受用户输入这一块,有着一个老生常谈的问题:"怎么样及时清空输入流中的数据? ...
- Linux下c语言实现myod
首先根据od要输出16进制的功能,以及c语言中文件的打开读取等函数,编写了如下代码. #include<stdio.h> #define N 1000 int main() { int c ...
随机推荐
- 基础篇:6)形位公差标注(GD&T标准)-总章
本章目的:理解GD&T概念,读懂和绘制GD&T图纸.本章是GD&T指引章节. 1.GD&T概念 GD&T 是 Geometric Dimensioning ...
- tomcat下各个文件夹的作用
1.bin目录:这个文件夹包含的是启动/关闭tomcat的脚本,里面有startup.sh(Linux环境下启动tomcat脚本)和startup.bat(Windows环境下启动tomcat脚本), ...
- Keras中间层输出的两种方式,即特征图可视化
训练好的模型,想要输入中间层的特征图,有两种方式: 1. 通过model.get_layer的方式.创建新的模型,输出为你要的层的名字. 创建模型,debug状态可以看到模型中,base_model/ ...
- [转] Gitlab 8.x runner安装与配置
[From]http://muchstudy.com/2018/07/13/Gitlab-8-x-runner%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AE ...
- odoo 的一些orm 操作
1.基础文件及目录结构 在认识odoo ORM框架前,先介绍一下odoo中模块目录结构. data:存放模块预制数据 i18n:存放国际化文件 models:存放模型等py代码 securit ...
- mongo嵌套查询
db.getCollection('TradeBookingRepresentation').find({uitid:'168282:20190214010009224', tradeVersion: ...
- 自学springboot
参考资料 https://www.renren.io/guide/
- 【DB2】普通用户最小查询权限分配
1. 通过实例用户或者有dbadm权限的用户连接数据库 db2 connect to <db-name> 2. 分配普通用户连接权限db2 "grant connect on d ...
- Android ListView中EditView再次焦点获取
问题:在ListView中使用EditView,当第一次将焦点给到EditView的时候弹出小键盘.使得EditView失去焦点. 分析:因为在第一次使用EditView弹出小键盘之后,会重新的调用一 ...
- bzoj 2167: 公交车站
Description Z市交通不发达,所有公交路线覆盖的边竟然一个环也不包含,甚至该市的公交路线有可能会分为几个互不连通的块,这可真是不可思议.有一天,你突然听到一条消息,说你的M个同学被困在了Z市 ...