Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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++_String_Space - Fatal编程技术网

C++ 带空格的输入?

C++ 带空格的输入?,c++,string,space,C++,String,Space,这会产生一个错误。有什么想法吗?你必须使用: 您想在cin中使用.getline函数 char input[100]; cin.getline(input,sizeof(input)); #包括 使用名称空间std; int main(){ 字符名[256],标题[256]; cout它不会“失败”;它只是停止阅读。它将词法标记视为“字符串” 使用: intmain() { std::字符串名称、标题; std::cout使用: 该函数可在中找到 getline(cin, input); #

这会产生一个错误。有什么想法吗?

你必须使用:


您想在cin中使用.getline函数

char input[100];
cin.getline(input,sizeof(input));
#包括
使用名称空间std;
int main(){
字符名[256],标题[256];
cout它不会“失败”;它只是停止阅读。它将词法标记视为“字符串”

使用:

intmain()
{
std::字符串名称、标题;
std::cout使用:

该函数可在中找到

getline(cin, input);
#包括

C方式

您可以使用cstdio中的
get
函数(c中的stdio.h):


标准库提供了一个名为
ws
的输入函数,该函数使用输入流中的空白。您可以这样使用它:

#include<iostream>
#include<string>
using namespace std;
int main(){

char name1[256];
string name2;
cin.getline(name1,256); // for input
getline(cin,name2); // for input
cout<<name1<<"\n"<<name2;// for printing
}
#include <iostream>
#include <string>

using namespace std;

int main(void) {
    string name;

    cout << "Hello, Input your name please: ";
    getline(cin, name);

    return 0;
}

我宁愿使用以下方法来获取输入:

std::string s;
std::getline(std::cin >> std::ws, s);
#包括
#包括
使用名称空间std;
内部主(空){
字符串名;

cout如何从输入读取字符串?

您可以使用
std::cin
读取单个以空格结尾的单词,如下所示:

#include<iostream>
#include<string>
using namespace std;
int main(){

char name1[256];
string name2;
cin.getline(name1,256); // for input
getline(cin,name2); // for input
cout<<name1<<"\n"<<name2;// for printing
}
#include <iostream>
#include <string>

using namespace std;

int main(void) {
    string name;

    cout << "Hello, Input your name please: ";
    getline(cin, name);

    return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
cout>s;


CUT @ Kevin Meh,它发生了。C++不是我们希望的那样直观。EW;为什么使用<代码> char 缓冲区?它是2011。为什么不使用<代码> CIN?GETLIN(输入,sieZOF(输入))
?另外,你不应该检查返回状态吗?@JonathanLeffler在写这篇文章时,这是我对最初提出的问题的答案(查看实际问题的第一条注释,你会发现由于OP的编辑,上下文已经发生了变化).无论如何,如果你觉得答案很糟糕,就投反对票。我承认这可能不是“最好的”解决方案但这是一个同样的解决方案。与其问我为什么不使用某些东西,你可以告诉我们所有人为什么我们应该按照你的方式来做。你的答案并不糟糕,也不需要向下投票。我确实认为两个小的更改将改善它。更改1将在调用
cin.getline()时使用
sizeof(input)
代替100
;这意味着您可以更改输入缓冲区的大小,只需更改一行而不需要更改两行。更改2将测试
cin.getline()
的返回,例如,使用
if(!cin.getline(input,sizeof(input)){…handle EOF or error…}
或类似内容,以提醒OP,尤其是输入操作容易受到意外行为的影响。其他答案也需要这样做。您不应该编辑您的问题以提出类似的新问题。原因是人们已经对您的原始问题给出了答案,而现在这些答案似乎与上下文无关。如果您r原来的问题已经回答了,请开始一个新问题以避免混淆。经过一点检查后,这很明显,但是您可以为变量
库添加一个声明吗
,以便清楚它是
cd
类型。对不起,伙计们,这是仓促完成的,我将重新发布。如果您要重新发布它作为替换,请将问题标记为mod删除。在更新中,您试图将
getline
转换为
int
。当然失败了。事实上,您很少想使用member-
getline
。它已经过时了。请改用free
getline
,它可以与
std::string
一起使用。[顺便说一句,cplusplus.com不是推荐的资源]@Tomalak为什么不推荐cplusplus.com?我一直在使用它:P@KevinDuke:教程可能具有误导性和不准确性,并且引用中包含大量错误。这些都是很好的资源。@NickSweeting:是的;请改用。对于文档链接,cppreference.com是cplusplus.com的有效替代品(这两个都是非官方的解释)非常糟糕的建议,
get
不可能安全使用。它甚至在C11中被完全删除。+1这是唯一对我有效的答案。其余答案说使用cin.getline()但这只是给了我一个错误,说这个函数不存在。@blembo:真的吗?因为我的答案,在这个答案发布三年多之前,说了完全相同的事情(与你声称的相反)@blembo:如果您的系统上不存在
cin.getline
,则表明您做了一些非常错误的事情。很可能您传递了错误的参数。最好不要为您的错误责备他人…@LightnessRacesinOrbit我理解如何将此答案视为您答案的子集(内容方面)。该评论中提到的问题可能是由于该线程中呈现方式和答案顺序的不同(请注意勾选和投票)。如果一个快速阅读者开始对C风格的getline不满意,然后是一个更长的答案(尽管对关注焦点的读者有用),然后是使用getline的另一种方法,读者最终可能会得出结论,这个答案是最好的答案,基本上与您的答案相似,但简洁明了。我比公认的答案更喜欢这个答案,因为我不需要指定字符长度。@TheWander确实,这是一个很大的好处。记住要包括stream:#include@LightnessRacesinOrbit,你能帮忙吗?这在打印输出时给了我一个额外的换行符,毫无理由。@AnshumanKumar我认为
getline
可能会在它返回的字符串中包含终止的换行符。如果是这样,你可以删除它。我认为这是目前为止最好的答案。我可以将它与std::ci结合使用n> >在上面。到目前为止最好的答案。当使用
std::getline(std::cin,s)
时,我会得到一个非常混乱的输入,我会说,在
中等待输入时中断了输入,而
/
for
循环。这个选项解决了我的问题!Include sstream:#Include
#include<cstdio>
int main(){

char name[256];
gets(name); // for input
puts(name);// for printing 
}
#include<iostream>
#include<string>
using namespace std;
int main(){

char name1[256];
string name2;
cin.getline(name1,256); // for input
getline(cin,name2); // for input
cout<<name1<<"\n"<<name2;// for printing
}
std::string s;
std::getline(std::cin >> std::ws, s);
#include <iostream>
#include <string>

using namespace std;

int main(void) {
    string name;

    cout << "Hello, Input your name please: ";
    getline(cin, name);

    return 0;
}
#include<iostream>
#include<string>
using namespace std;

int main()
{
    cout << "Please enter a word:\n";

    string s;
    cin>>s;

    cout << "You entered " << s << '\n';
}
#include<iostream>
#include<string>
using namespace std;

int main()
{
    cout << "Please enter a line:\n";

    string s;
    getline(cin,s);

    cout << "You entered " << s << '\n';
}