[笔记]scanf的使用(主要是针对char)

本文介绍了C语言中使用scanf输入字符遇到的问题,包括scanf如何处理空格和回车,以及针对char类型输入时的异常情况。作者总结了scanf在读取int和字符串时会自动忽略空格和回车,但读取char时会将空格和回车作为有效输入。为了解决这个问题,提出了使用fflush(stdin)、getchar()或在scanf中添加特定格式控制符等方法。最后分享了一个实例展示了方法三的效果。

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

学的是C++,用cin cout也用的很顺溜,写自己的类时重载“<<”与“>>”运算符也很爽,但是发现在刷算法竞赛题时,cin cout很没优势,输入量大时一道题我用cin cout要50ms,用scanf printf只要10ms、20ms,这个就差的太大了时间都花在输入输出上也是很郁闷。于是开始使用C的输入输出标准。输出很正常,也可以轻松更改double输出的精度,c++还要个iomanip头文件,还烦一点。格式化字符%u %d %ld %lld %f %lf %s %c等就这几个限死了,也就是只能输入输出这几个系统自带的格式,是没法将自己的类重载到里面的,,只能自己做个print函数。不过毕竟面向对象是c++的内容。
就是那个输入scanf有些异类。首先输入得取地址,输入int的a要&a不能写a。这我总是忘记。先输入整形、long long、double、字符串什么的都没问题,可以任意换行。scanf(“%d%d%d%d”, &a, &b, &c, &d);
像下面这样输入
//123 2
//
//
// 23
//6
有任意空格和回车都可以接收。
而对于字符串char sss[100],不支持空格的读取,要读取空格得用gets()。
而scanf(“%s”,sss)还是scanf(“%s”,&sss)都可以,论坛里上说前者还少取个地址更快一点。
而对于char型,char ch;scanf(“%c”,ch);可以是可以,但是不能像int等一样随心所欲地加空格和回车,明明说好的scanf自带无视回车和空格。比如下一段代码

int main()
{
    int a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值