你怎么能忽略cin直到它进入下一行?

时间:2013-01-30 05:07:03

标签: c++

如果您有一个文字文件,您正在逐字逐句地阅读cin:

char text;
cin >> text;
cout << char << endl;

假设您要忽略以“&gt;”开头的所有行直到新的一行,你怎么能这样做?

2 个答案:

答案 0 :(得分:1)

您可以使用::

比较char的{​​{1}}读数
'>'

如果找到,请跳至int strncmp ( const char * str1, const char * str2, size_t num ); 读取等于char,即跳至'\n'返回strncmp 0

答案 1 :(得分:0)

通常你想使用std :: istream :: ignore,比如:

static const int max_line = 65536;

if (text == ">")
    std::cin.ignore(max_line, '\n');

请注意,我已指定跳过64K字节的最大距离。许多人推荐类似std::numeric_limits<std::streamsize>::max()的内容,这基本上意味着跳过任何数量的文本,直到找到分隔符(在这种情况下为新行)。

IMO,指定如此庞大的数字通常是一个糟糕的想法 - 如果您在没有看到新行的情况下长时间 ,那么停止并假设您获得了错误的数据是安全的。一旦你读过足够多的是的合理的一定有问题,最好停下来警告用户,而不是明显地锁定了程序花费几分钟,读书无用论千兆字节的数据(和然后可能会给用户一个错误信息。

另一种可能性(特别是如果你相当肯定你会得到好的输入)是从一个完整的行开始(例如,使用std :: getline),然后如果它以>开头,只是跳过处理该行,然后返回阅读下一行。