0

如果您有一个使用 cin 逐字符读取的文本文件:

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

假设您想忽略以“>”开头的任何行,直到新行,您该怎么做?

4

2 回答 2

1

您可以比较char使用'>'::

int strncmp ( const char * str1, const char * str2, size_t num );

如果找到,则跳过直到char读取等于'\n'即,跳过直到strncmp返回0( char, '\n', 1 )

于 2013-01-30T05:15:52.630 回答
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),然后如果它以 a 开头,则>跳过处理该行,然后继续回来阅读下一篇。

于 2013-01-30T05:45:42.857 回答