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