C++ C++;getline()不';t端输入

C++ C++;getline()不';t端输入,c++,string,input,getline,C++,String,Input,Getline,将代码更改为 getline(cin,str,c[0]) 将代码更改为 getline(cin,str,c[0]) 您可能需要稍微重新设计代码,例如,如果分隔符是一个字符,那么为什么要读取字符串(并使用一种晦涩的语法,如“c.c_str()[0]”—至少只需使用c[0]从字符串中提取第一个字符)?只需读取单个分隔符 此外,我从getline()中没有看到意外的结果 如果您尝试此代码: Insert the character that ends the input: } Insert the s

将代码更改为

getline(cin,str,c[0])

将代码更改为

getline(cin,str,c[0])


您可能需要稍微重新设计代码,例如,如果分隔符是一个字符,那么为什么要读取
字符串
(并使用一种晦涩的语法,如“
c.c_str()[0]
”—至少只需使用
c[0]
从字符串中提取第一个字符)?只需读取单个分隔符

此外,我从
getline()
中没有看到意外的结果

如果您尝试此代码:

Insert the character that ends the input:
}
Insert the string:
asdf

}
do it}
damn}

您可能需要稍微重新设计代码,例如,如果分隔符是一个字符,那么为什么要读取
字符串
(并使用一种晦涩的语法,如“
c.c_str()[0]
”—至少只需使用
c[0]
从字符串中提取第一个字符)?只需读取单个分隔符

此外,我从
getline()
中没有看到意外的结果

如果您尝试此代码:

Insert the character that ends the input:
}
Insert the string:
asdf

}
do it}
damn}

您的代码和示例输出不同。你能贴出正确的吗?你的代码对我有用。但是我会用一个直接的
char
来代替
c[0]
,而不是
c.c\u str()[0]
也可以,但是我不能重现这种行为(g++-4.7,Ubuntu 12.10)。我有LLVM,而使用
c[0]
则不行work@fpiro我想你指的是clang或llvm gcc(llvm本身不是编译器)。在任何一种情况下,这都应该很好。您的代码和示例输出是不同的。你能贴出正确的吗?你的代码对我有用。但是我会用一个直接的
char
来代替
c[0]
,而不是
c.c\u str()[0]
也可以,但是我不能重现这种行为(g++-4.7,Ubuntu 12.10)。我有LLVM,而使用
c[0]
则不行work@fpiro我想你指的是clang或llvm gcc(llvm本身不是编译器)。在任何一种情况下,这都应该很好。@Predheep-c是一个字符,不允许为一个字符类型下标。@Predheep-c是一个字符,不允许为一个字符类型下标。谢谢大家,我发现错误就在这个输入之后的算法中。谢谢大家,我发现错误就在这个输入之后的算法中。
#include <iostream>
#include <string>
using namespace std;

int main()
{
    cout << "Insert the character that ends the input: " << endl;  
    char delim;
    cin >> delim;

    string str;   
    cout << "Insert the string: " << endl;   
    getline(cin, str, delim);

    cout << "String: " << str << endl;
}
C:\TEMP\CppTests>cl /EHsc /W4 /nologo /MTd test.cpp
test.cpp

C:\TEMP\CppTests>test.exe
Insert the character that ends the input:
!
Insert the string:
hello!world
String:
hello