我正在阅读标准输入,并且当我遇到以“a”开头的行时,我想停止跳过所有内容:
while(cin.peek() != 'a') { cin.get(); }
唯一的问题是,如果我在行中间有一个a,这也会触发 . 我会尝试 cin.getline(); 但我不知道线的最大长度 . 有没有办法去下一行?
cin.getline();
您可以将 cin.get() 替换为 cin.ignore(numeric_limits<streamsize>::max(), "\n") .
cin.get()
cin.ignore(numeric_limits<streamsize>::max(), "\n")
其中 numeric_limits<streamsize>::max() 是要提取的最大字符数, "\n" 表示要停止提取字符的值是End Of Line(除了End Of File) .
numeric_limits<streamsize>::max()
"\n"
你可以自己做,像这样:
#include <iostream> #include <string> int main() { bool skip = true; for(std::string line; std::getline(std::cin, line);) { if(line.size() && line[0] == 'a') skip = false; if(!skip) std::cout << line<< std::endl; } return 0; }
现场演示
这将忽略每一行读取,直到遇到非空行,以 a 字符开头 . 之后,它将停止跳过读取的行,并打印每一行 .
a
2 回答
您可以将
cin.get()
替换为cin.ignore(numeric_limits<streamsize>::max(), "\n")
.其中
numeric_limits<streamsize>::max()
是要提取的最大字符数,"\n"
表示要停止提取字符的值是End Of Line(除了End Of File) .你可以自己做,像这样:
现场演示
这将忽略每一行读取,直到遇到非空行,以
a
字符开头 . 之后,它将停止跳过读取的行,并打印每一行 .