用c++做ACM的时候发现读入数据是一个很头疼的事情,用了各种cin、getline(),发现scanf()最方便,能够默认分割所有的空白字符(空格,回车和指标符都行),然后只需要用外层的for循环来控制读入的个数和存储位置了
对于异常情况的处理,比如数据结束,数据格式错误等,就需要我们了解scanf()函数的返回值了
- 首先scanf()函数有返回值且返回值是int型
当scanf()函数按照指定格式正确接收变量时,返回正确接收变量的个数
当scanf()函数没有接收到指定格式的变量时,返回值为0
- 遇到错误或遇到end of file,返回值为EOF(-1)
比如:
scanf(“%d%d”, &x, &y);
- 如果x和y都被成功读入,那么scanf的返回值就是2;
- 如果只有x被成功读入,返回值为1;
- 如果x和y都未被成功读入,返回值为0;
- 如果遇到错误或遇到end of file,返回值为EOF(-1)
接下来看看结合实际的数据输入格式,到底怎么用
现在要将形如上面的数据读入
- 每组数据有两行
- 第一行的第一个数字告诉我们第二行会有多少个元素
- 读到输入结束为止
上代码:
|
结果