【发布时间】:2021-10-08 02:23:22
【问题描述】:
这是一个简单的 hello 程序,但如果我运行它,它什么也不会显示。
#include <iostream>
#include <string>
using namespace std;
int main() {
cout << "Please enter your name: ";
string username;
cin >> username;
cout << "hello, " << username << ", ..., goodbye\n";
}
输出: 终端里什么都没有
单个cout可以工作,所以我猜可能是string引起的缓冲区问题。
#include <iostream>
#include <string>
using namespace std;
int main() {
cout << "Please enter your name: ";
//string username;
//cin >> username;
//cout << "hello, " << username << ", ..., goodbye\n";
}
输出:
Please enter your name:
但是添加 flush 并不能使它起作用。
#include <iostream>
#include <string>
using namespace std;
int main() {
cout << "Please enter your name: ";
string username;
cin >> username;
cout << "hello, " << username << ", ..., goodbye\n" << flush;
}
输出:终端中没有任何内容
然后我把username的类型改成char, int,都正常工作了。
#include <iostream>
#include <string>
using namespace std;
int main() {
cout << "Please enter your name: ";
char username;
cin >> username;
cout << "hello, " << username << ", ..., goodbye\n";
cout << "Please enter your name: ";
int username;
cin >> username;
cout << "hello, " << username << ", ..., goodbye\n";
}
输出:
Please enter your name: asdf
hello, a, ..., goodbye
Please enter your name: 123
hello, 123, ..., goodbye
以上是code-runner运行的,所以我尝试手动编译,还是不行。
DINO@DINO-Amadeus MINGW64 /d/DINO/code/essential_c++
$ g++ -o chap1 chap1.cc
DINO@DINO-Amadeus MINGW64 /d/DINO/code/essential_c++
$ ./chap1
DINO@DINO-Amadeus MINGW64 /d/DINO/code/essential_c++
$
有人可以帮忙吗?非常感谢。
【问题讨论】:
-
@JaMiT 已编辑,您现在可以看看这个问题吗?
-
您的最后一个测试用例无法编译(多个同名变量),即使编译它也肯定不会产生显示的输出(输入
asdf,第一个>>会只读a,留下sdf由第二个>>读取并失败)。 -
该代码对我有用(好吧,除了必须将您的最后一个示例分成两个程序之外),而且我看不到这里潜伏着未定义的行为。所以肯定有其他事情发生。
-
@Remy Lebeau 但这些只是微不足道的无效输入。真正的问题是第一个程序可以编译但不允许我输入。
-
@KOMAX233 can't reproduce。默认情况下,
cin和cout应该是tie()'d 一起,因此读取输入将首先刷新任何缓冲输出。你所描述的让我想知道它们是否由于某种原因没有在你的系统上捆绑在一起。无论如何,在您的flush示例中,您冲错了地方。在第一个cout之后和cin之前执行它,而不是在第二个cout之后:cout << "Please enter your name: " << flush;
标签: c++ visual-studio-code cin