如果您有一个使用 cin 逐字符读取的文本文件:
char text;
cin >> text;
cout << char << endl;
假设您想忽略以“>”开头的任何行,直到新行,您该怎么做?
如果您有一个使用 cin 逐字符读取的文本文件:
char text;
cin >> text;
cout << char << endl;
假设您想忽略以“>”开头的任何行,直到新行,您该怎么做?
您可以比较char
使用'>'
::
int strncmp ( const char * str1, const char * str2, size_t num );
如果找到,则跳过直到char
读取等于'\n'
即,跳过直到strncmp
返回0
( char, '\n', 1 )
通常你想使用 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 开头,则>
跳过处理该行,然后继续回来阅读下一篇。