c语言 fget能不能接着scanf读数据,getchar scanf fgets 效率试验

本文通过实测对比了在大量和小量数据场景下,fgets、scanf和getchar在效率上的差异,发现单位大小对结果有显著影响:大文件时fgets>scanf>getchar,小文件时getchar>scanf>fgets。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大量数据读写:

效率 fgets > scanf > getchar

灵活度相反

小量数据频繁读写,

效率 getchar > scanf > fgets,这里getchar比scanf几乎快一倍,而scanf只比fgets快一点点。

下面是测试的程序,我用 TIMEFORMAT="" time ./test < ~/tmp/bochs-2.4.tar.gz 命令,通过修改scanf和fgets每次读取的字节数(2和1024)来观察fgets,scanf 和 getchar 效率的区别。

明显单位是1024的时候,fgets > scanf > getchar,单位是2的时候,getchar > scanf > fgets。

#include

int main(){

/*

char s[1024];

while(scanf("%2s", s) != EOF)

;

*/

int ch;

while((ch = getchar()) != EOF)

;

/*

char s[1024];

while(fgets(s, 2, stdin) != NULL)

;

*/

}

命令是TIMEFORMAT="" time ./test < ~/tmp/bochs-2.4.tar.gz

bochs-2.4.tar.gz文件总共3.9MB,(环境是vmware, red hat linux 9)

用fgets(s, 1024, stdin)时:

0.00user 0.01system 0:00.01elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k

0inputs+0outputs (74major+12minor)pagefaults 0swaps

用fgets(s, 2, stdin)时:

0.37user 0.00system 0:00.39elapsed 94%CPU (0avgtext+0avgdata 0maxresident)k

0inputs+0outputs (74major+12minor)pagefaults 0swaps

用scanf("%1024s", s)时:

0.08user 0.00system 0:00.10elapsed 73%CPU (0avgtext+0avgdata 0maxresident)k

0inputs+0outputs (79major+12minor)pagefaults 0swaps

用scanf("%2s", s)时:

0.29user 0.02system 0:00.32elapsed 96%CPU (0avgtext+0avgdata 0maxresident)k

0inputs+0outputs (79major+12minor)pagefaults 0swaps

用ch = getchar()时:

0.13user 0.04system 0:00.18elapsed 91%CPU (0avgtext+0avgdata 0maxresident)k

0inputs+0outputs (72major+12minor)pagefaults 0swaps

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值