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下的更多相关文章

  1. C语言实现—学生成绩管理系统(Linux下运行)

    开发环境:Linux 开发语言:C 相关文件下载: 码云:https://gitee.com/ikaros-521/c_project/tree/master/%E5%AD%A6%E7%94%9F%E ...

  2. 【转】Go语言入门教程(一)Linux下安装Go

    说明 系统是Ubuntu. 关于安装 下载安装包 当前官方下载地址是https://golang.org/dl/,如果不能访问,请自行FQ,FQ是技术工作者的必备技能. 安装 tar -xzvf go ...

  3. Linux C编程之一:Linux下c语言的开发环境

    ---恢复内容开始--- 今天开始根据Linux C编程相关视频的学习所做的笔记,希望能一直坚持下去... 1.开发环境的构成 编辑器:VI: 编译器:选择GNU  C/C++编译器gcc: 调试器: ...

  4. Linux 下LNMP环境搭建_【all】

    LNMP = Linux + Nginx + Mysql + PHP 1.0 Linux环境搭建 Linux 系统安装[Redhat] 1.1. FastCGI介绍 1.什么是CGI(common g ...

  5. Linux 下安装 jdk压缩包

    按 esc  退出  记得 输入 :q    记得 : Linux下安装jdk 把压缩文件放在 桌面的soft 下 在usr目录下新建文件夹Java,把文件复制到 usr/java 更改下路径! 3 ...

  6. linux下串口通信与管理

    linux下的串口与windows有一些区别,下面将介绍一下linux下串口通信管理 查看是否支持USB串口: #lsmod | grep usbserial 如果没有信息:sudo apt-get ...

  7. C语言中最常用的三种输入输出函数scanf()、printf()、getchar()和putchar()

    本文给大家介绍C语言中最常用的三种输入输出函数scanf().printf().getchar()和putchar(). 一.scanf()函数格式化输入函数scanf()的功能是从键盘上输入数据,该 ...

  8. 简记清空C语言输入残留内容

    为了在命令行程序中实现和用户的交互,我们编写的程序的运行过程中往往涉及到对标准输入/输出流的多次读写. 在C语言中接受用户输入这一块,有着一个老生常谈的问题:"怎么样及时清空输入流中的数据? ...

  9. Linux下c语言实现myod

    首先根据od要输出16进制的功能,以及c语言中文件的打开读取等函数,编写了如下代码. #include<stdio.h> #define N 1000 int main() { int c ...

随机推荐

  1. SVN知识点整理

    Eclipse安装SubVersion插件 Help -> Install new software... -> add Name : Subversion Location : http ...

  2. oracle12c之二 控制PDB中SGA 与 PGA 内存使用

    oracle12c之 控制pdb中sga 与 pga 内存使用 Memory Management using Resource Manager Oracle数据库资源管理器(资源管理器)现在可以在多 ...

  3. sort sorted() reverse() reversed() 的区别

    sort()是可变对象(字典.列表)的方法,无参数,无返回值,sort()会改变可变对象,因此无需返回值.sort()方法是可变对象独有的方法或者属性,而作为不可变对象如元组.字符串是不具有这些方法的 ...

  4. Python ImportError: No module named 'requests'解决方法

    前言:最近在学习python,安装了python3.5的环境后,在网上下载了一个python文件运行的时候,提示ImportError: No module named 'requests'(找不到r ...

  5. jsp模板添加URL定位语句

    html的head头中加入以下语句,方便url链接诶编写定位 <base href="${pageContext.request.scheme}://${pageContext.req ...

  6. Tcp参数优化

    net.core.netdev_max_backlog = 400000 #该参数决定了,网络设备接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目. net.core.opt ...

  7. ubuntu安装甲骨文最新jdk7

    1.下载jdk7(我下载的是Java SE Platform(jdk) 7u51): http://www.oracle.com/technetwork/java/javase/downloads/i ...

  8. 深入理解JavaScript系列(42):设计模式之原型模式

    介绍 原型模式(prototype)是指用原型实例指向创建对象的种类,并且通过拷贝这些原型创建新的对象. 正文 对于原型模式,我们可以利用JavaScript特有的原型继承特性去创建对象的方式,也就是 ...

  9. linux下查看memcache版本

    用telnet 127.0.0.1 11211命令连接上memcache, 然后直接输入stats就可以得到memcache服务器的版本

  10. DIY了一下自己blog的UI

    当年才学前端时就想改自己blog的UI,然鹅当时没看见那个“申请JS权限”,一直以为blog不能随意DIY样式,只改了少许CSS.现在重新看看设置管理选项,简单修改了一下样式(注意:修改样式之前发邮件 ...