我只想写一个简单的脚本,询问别人的名字并将其打印出来。但由于某种原因,当我使用字符串数据类型时,它只是一种,什么都不做。
如果我使用字符串,这是代码和输出:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string name;
cout << "Please give me your name: ";
getline(cin, name);
cout << "Hello " << name << endl;
return 0;
}
正如您所看到的,它只运行.exe并且没有任何反应。但是,如果我将C方法用于字符串并使用字符数组并且也不使用getline(),它可以正常工作(但不会跳过&#39; \ 0&#39;字符):
#include <iostream>
#include <string>
using namespace std;
int main()
{
//string name;
char name[15];
cout << "Please give me your name: ";
//getline(cin, name);
cin >> name;
cout << "Hello " << name << endl;
return 0;
}
我尝试了其他几种方法,但都运行良好。出于某种原因,将变量 name 作为字符串数据类型使其表现得非常奇怪。我试着查看一些基于C ++的书籍和网络,但似乎没有人 有这个问题。
我只是想加上这个来澄清一下,我检查一下该程序是否只是执行得太快,让我看不清楚发生了什么。它没有这样做,它甚至会跳过它应该等待输入的部分。
我使用Visual Studio Code编写程序和MinGW进行编译。我拿了我的代码并在https://www.onlinegdb.com/处运行它并按预期工作:
这可能是Windows或命令提示符问题吗?
答案 0 :(得分:0)
根据STL实现和操作系统,std::cout
可能正在缓冲内存中的数据。它通常不会将缓冲数据刷新到控制台,直到:
'\n'
个字符std::cout.flush()
被调用(包括输出std::endl
,在写入换行符后调用flush()
。在输出提示后并在阅读std::cout.flush()
之前尝试拨打std::flush
(直接或通过name
):
#include <iostream>
#include <string>
using namespace std;
int main() {
string name;
cout << "Please give me your name: " << flush;
getline(cin, name);
cout << "Hello " << name << endl;
return 0;
}