Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;cout字符串操作_C++_String_Cout_Cin - Fatal编程技术网

C++ C++;cout字符串操作

C++ C++;cout字符串操作,c++,string,cout,cin,C++,String,Cout,Cin,我试图从命令行获取一行作为输入。我的问题是我没有得到整条线,但它被空间标记化了 因此,如果我输入诸如“我非常喜欢数学”之类的内容,而不是 "you enterend: I like Math a lot" 我得到如下结论: EDITING MODE: Enter a command i like Math a lot you entered i EDITING MODE: Enter a command you entered like EDITING MODE: Enter a comm

我试图从命令行获取一行作为输入。我的问题是我没有得到整条线,但它被空间标记化了

因此,如果我输入诸如“我非常喜欢数学”之类的内容,而不是

"you enterend: I like Math a lot"
我得到如下结论:

EDITING MODE: Enter a command
i like Math a lot
you entered i

EDITING MODE: Enter a command
you entered like

EDITING MODE: Enter a command
you entered Math

EDITING MODE: Enter a command
you entered a

EDITING MODE: Enter a command
you entered lot


void enterEditingMode(){
    editingMode = TRUE;
    static string CMD = "\nEDITING MODE: Enter a command\n";
    string input;
    while(editingMode == TRUE){
        cout << CMD;
        cin >> input;
        //we assume input is always correct
        // here we need to parse the instruction
        cout << "you entered " << input <<endl;
编辑模式:输入命令
我非常喜欢数学
你进来了,我
编辑模式:输入命令
你进来的样子
编辑模式:输入命令
你上数学了
编辑模式:输入命令
你输入了一个
编辑模式:输入命令
你进了停车场
void enterEditingMode(){
编辑模式=真;
静态字符串CMD=“\n编辑模式:输入命令\n”;
字符串输入;
while(编辑模式==TRUE){
cout>输入;
//我们假设输入总是正确的
//这里我们需要解析指令

cout
std::getline
是一次读取一行输入的标准方式

您可以这样使用它:

std::getline(std::cin, string);
if (std::getline(std::cin, string))
{
    // successfully read a line...
}
它返回一个对输入流的引用,该输入流隐式转换为
void*
,因此您可以像这样轻松地检查是否成功:

std::getline(std::cin, string);
if (std::getline(std::cin, string))
{
    // successfully read a line...
}

std::getline
是一次读取一行输入的标准方法

您可以这样使用它:

std::getline(std::cin, string);
if (std::getline(std::cin, string))
{
    // successfully read a line...
}
它返回一个对输入流的引用,该输入流隐式转换为
void*
,因此您可以像这样轻松地检查是否成功:

std::getline(std::cin, string);
if (std::getline(std::cin, string))
{
    // successfully read a line...
}
cin.getline(输入);

有关更多信息,请参阅。

cin.getline(输入);


有关更多信息,请参见。

名为
getline
istream
成员函数都使用
char
缓冲区和长度,而不是
字符串。我已经尝试过了,问题是,由于代码在while循环中,它首先读取新行字符。因此我总是得到“you entered”当我甚至不输入任何内容时。名为
getline
istream
成员函数都使用
char
缓冲区和长度,而不是
string
。我已经试过了,问题是由于代码在while循环中,它首先读取新行字符。因此我总是得到“you entered”当我甚至没有输入任何内容时,请不要忘记cin.getline(char*,int)版本,如果您希望接受c字符串。它没有到void*的显式转换。它有到在布尔上下文中可用的未指定类型的显式转换。在您的实现中,它可能碰巧是void*,但这可能不适用于所有类型。而且向初学者解释结果可以转换为某些类型要容易得多类似于布尔运算的东西。实际上,
运算符void*
是标准所要求的。它是
基本ios
基类接口的一部分。而且不要忘记cin.getline(char*,int)版本,如果您希望接受c字符串。它没有到void*的显式转换。它有到在布尔上下文中可用的未指定类型的显式转换。在您的实现中,它可能碰巧是void*,但这可能不适用于所有类型。而且向初学者解释结果可以转换为某些类型要容易得多类似布尔运算的东西。实际上,
运算符void*
是标准所要求的。它是
基本ios
基类接口的一部分。