• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C语言输入语句scanf与fgetslinux下

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap