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

C++ 你怎么能忽略cin,直到它进入下一行?,c++,C++,如果您有一个文本文件,正在使用cin逐字符读取: char text; cin >> text; cout << char << endl; char文本; cin>>文本; cout您可以使用以下方法比较'>读取的字符: int strncmp ( const char * str1, const char * str2, size_t num ); 如果找到,则跳过直到charread equals'\n',即,跳过直到strncmp返回0(char'

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

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

cout您可以使用以下方法比较
'>
读取的
字符:

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

如果找到,则跳过直到
char
read equals
'\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\u limits::max()
,这基本上意味着在找到分隔符之前跳过任意数量的文本(本例中为新行)

在我看来,指定这么大的数字通常是一个糟糕的主意——如果你走得太久而没有看到新行,那么停下来假设你得到了坏数据是安全的。一旦你阅读了足够多的内容,能够合理地确定有问题,最好停止并警告用户,而不是花几分钟时间让程序显然被锁定,读取千兆字节的无用数据(然后可能会给用户一条错误消息)


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

简单,运行它,然后散散步。。。