本来以为 while (cin >> a[n++]);
可以直接读入一行结束,但是发现根本无法退出循环,用VS调试到行尾就看不到内容了,而此时循环没有退出也没有报错。大概是把换行符当整数读入了所以cin并没有fail?
然后尝试了:
int temp;
while (true)
{
cin >> temp;
if (temp == '\n') break;
a[n++] = temp;
}
样例可以过,但是依然不能AC(OJ上的一道题),我想大概是可能有跟 \n
ASCII值相同的整数。
当然,可以用字符串先整行读入再解析,但是难道 C++ 中没有更好更简洁的方法吗?因为问题本身并不难。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
自己处理空格还是蛮麻烦的。一般用sstream就好,真要想自己做,也是可以。
再延伸一步,可以自己写一个manipulator。
怎么用呢?和标准的manipulator一样用!
cin >> xyz返回false的唯一原因是failbit或者badbit被设置了。所以你自己写可以自己根据\n设置failbit。
用cin读int会直接跳过空格回车,没办法区分是否换行。
一个办法是把整行读出来然后再用sscanf或者sstream,这样也不算很麻烦。直接读大概是没办法了。
自问自答:
参考了一些资料,最后用我觉得力求简洁的类C的方法解决了读入数据的问题,如下: