- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我以为getline
停在换行符处,但是while循环没有结束?它返回正确的数据,但它只是位于终端窗口中。例如:
Enter an expression: #5+4#5+4
(blinking cursor)
(可以一直输入数据,一直按回车不会退出)
我的代码(main.cpp):
int main()
{
string exp;
cout << "Enter an Infix Expression:";
while (getline(cin, exp, '#'))
{
string token = exp;
string post;
cout << token << endl;
IntoPost *infix = new IntoPost(token.length());
post = infix->inToPost(token);
cout << post << endl;
}
cin.get();
}
最佳答案
您当前的程序正在无限循环,因为
getline
返回
std::basic_istream
,因此 while(getline()) 永远不会等于 'false'。
正如 @0x499602D2 所说,您的程序正在按预期工作,但从 getline 中提取只能以两种方式结束,如引用文献 here 所示。 :
Extracts characters from is and stores them into str until the delimitation character delim is found (or the newline character, '\n', for when no delimiter is specified).
The extraction also stops if the end of file is reached in is or if some other error occurs during the input operation.
第一个条件很难实现,因为控制台上的输入是由\n 字符触发的。
至于第二个条件,根据@DavidC.Rankin:
You can also generate a manual EOF on Linux with [Ctrl+d] or windows with [Ctrl+z] (generally twice is required)
这意味着解决方案是使用 [Ctrl+d] 或 [Ctrl+z] 随时触发第二个条件来结束 while 循环。
<小时/>您可以尝试结束循环的另一种方法是在输入“退出”字符串时中断:
(1)
#include <algorithm>
//...
while (getline(cin, exp, '#'))
{
// removes meaningless endline chars from input
exp.erase(std::remove(exp.begin(), exp.end(), '\n'), exp.end());
if (exp == "exit"){
break;
}
//... Your While Block Code Here!
}
要打破 while 循环,您可以简单地使用:
exit#
# 注意,endls
来自您的couts
在循环中将渗入您的输入在您的下一个 while (getline(cin, exp, '#'))
上,给我们不需要的换行符。为了防止这种情况,我们可以使用 std::erase() 删除输入中的结束行。如果您希望在输入中保留这些结尾,只需设置 string token = exp;
在erase()行前面。
关于c++ - 带 getline 的 while 循环不会因用户输入而结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58045490/
main = do input [f a] -> f [a] sequenceA [] = pure [] sequenceA (x:xs) = (:) x sequenceA xs 很
while(getline()) 和 while(!getline().eof()) 有什么区别? 正在解析输入字符串。我尝试了两种条件检查,结果有所不同。 std::string testStr =
我知道我知道。以前有人问过这个问题,但我查看了所有答案,但似乎没有一个能解决我的问题。当我使用 getline 函数获取文件中一行的内容时,它不起作用。 getline(file, line); '文
使用 getline() 函数时出现以下错误: 没有重载函数“getline”的实例匹配参数列表 在一个名为“Time”的类中,我在读取以下输入时使用它: istream & operator >>
我正在阅读 C++ 入门书并尝试所有代码示例。我对这个很感兴趣: #include #include using std::string; using std::cin; using std::c
#include #include #include using namespace std; int main() { char d,a[9],e[9]; cin.getline(a,9); c
假设我想从控制台读取一个整数,并且我不希望程序在输入非整数字符时中断。这就是我的做法: #include #include #include using namespace std; int m
这可能不是一个错误,但我不知道出了什么问题。我的第一个条目在第二次迭代中对 str1 重复,并且从那时起也是如此。只有第一次迭代顺利。 #include #include using namesp
string text; getline(text.c_str(),256); 1) 我收到错误消息“错误:没有匹配函数来调用‘getline(const char*, int)”上面有什么问题,因为
哪个更好,更受欢迎?我真的发现阅读 API 令人困惑。 最佳答案 成员(member)版读入char*,免费版读入std::string。所以更喜欢免费版!像这样使用它: std::istream &
我正在尝试解决这个问题,但出于某种原因,我一直收到这个问题: no instance of "getline" matches the argument list. 我查过这个问题,很多次是因为人们使
长话短说 使用 libc++ 版本的 getline 函数的程序在从管道读取输入时会阻塞,直到管道的缓冲区已满。 NOT libstdc++ 版本的 getline 函数也是如此:这里函数立即读取并返
我的程序的一部分: #include #include #include #include #include using namespace std; /* Works for istrin
我是一名正在准备期末考试的 C++ 初学者。我用两种方式写了一个程序。第一个代码使用 cin.getline() 并且不能正常工作。第二个代码使用 cin.get() 和 cin >> 并正确执行所有
我正在尝试使用 getline 解析文档以获取整行并将其放入名为“line”的字符串变量中。问题是我收到一条错误消息:“没有重载函数 getline 的实例与参数列表匹配。”谁能帮我解决这个问题? #
我有一个带有 getline 函数的源代码文件,当我编译它时收到错误(下面的代码和错误)。我的问题是我从一个已经编译和工作的程序(也包括在下面)中复制并粘贴了整个函数。我在程序的其他 2 个源代码文件
我正在尝试从文件中读取,但 C++ 不想运行 getline()。 我收到这个错误: C:\main.cpp:18: error: no matching function for call to '
例子: std::ifstream in("some_file.txt"); std::string line; // must be outside ? while(getline(in,line)
注意:已解决,问题不是 getline() 而是 find 函数数组填充不当! 在发布我自己的问题之前,我已经查找了几个问题,但找不到我的问题的答案。这是我发布的第一个问题,但在发布我自己的问题之前,
我的代码块中有一个 getline 函数。但是在编译 make 文件时出现以下错误: cc -DMAIN -c -o terp.o terp.c terp.c:130:15: error: con
我是一名优秀的程序员,十分优秀!