关于c++输入输出的一些小问题

本文探讨了在编程时如何正确处理不确定数量的输入数据,包括使用scanf、cin和getchar等方法,并详细介绍了它们的特点及适用场景。

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

各位写代码的时候总会遇到一些奇奇怪怪的问题,一些问题甚至让你怀疑你的智商,其中最简单又是最头疼的就是输入输出的问题。而我们最该担心的不是速度够不够快的问题(因为很多人还用不上),而是如何正确的输入输出那些奇形怪状的测试数据,输出是最可控的,那么就要解决输入的问题了。
面对不知道有多少个数据的时候我们通常有两种方式方式,而此时你又不愿意直接当成字符串来读,就像这样:

char a[1000];
scanf("%s",a);
//或者是这样
cin>>a;

因为这样做的话会带来很多问题,首先,也许你想读入一个数据就处理一个数据,但它不告诉你给了多少个的时候。然后,你可能读入字符串后会涉及到一些截取,例如分成两个数据之类的,这样的做法显然就不优了,那么怎么做呢?你可以这样:

while(scanf("%c",ch)!=EOF)
{
	...;
}

值得一提的是scanf的返回值是你成功读入数据的个数,如果失败,就返回0,但建议大家使用EOF文件结束符来判断。那么有一个不得不提的问题出现了,要是你手贱在要读入的数据后面还多打了一些回车空格什么的,它也会很诚实的将所有字符读进来。当然如果你不愿意用
scanf,害怕犯错误,那么你们还可以使用cin,就像这样:

while(cin>>ch)
{
	...;
}

由于cin的特殊性,标准输入输出流会帮助你回避一些可能的人为错误,比如数据读完后的回车空格什么的。cin虽然不是库函数,是一个操作符,但它仍然有值:

  • goodbit:无错误正常
  • eofbit:文件结束
  • badbit:有致命错误无法挽回
  • failbit:输入错误,可以挽回

当然如果你想设置一些其他的读入结束符,那就在while()循环的判断条件中去改了。通常这时我们用getchar()来代替scanf和cin,因为这样才能知道到底自己读入的是什么,就像这样:

while(1)
{
	char a=getchar();
	if(a==ch)//ch由自己决定
		break;
	......
}

希望这能对大家有所帮助吧!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值