我只是从C ++中的数组开始,我在获取数组的第一个字符时遇到了问题。
这是我的代码,
1-我输入一个名字,例如“Jim”
char name[30];
cin.ignore();
cin.getline(name, 30);
2-马上我试着小行星
cout<<"NAME:"<<name; // THIS PRINTS 'im'
我确信它会打印'J'。我做错了什么?
答案 0 :(得分:10)
这是cin.ignore的签名:
istream& ignore (streamsize n = 1, int delim = EOF);
因此,如果在没有任何参数的情况下调用ignore函数,默认情况下它将忽略输入中的'1'char。在这种情况下,它忽略了'J'。删除忽略调用,你会得到'吉姆'。
答案 1 :(得分:4)
只需删除cin.ignore();
这会忽略第一个字符,因此你会错过'J'。
答案 2 :(得分:-1)
我有这段代码的问题是它在第一个周期后吃第一个字符(第一个周期没问题)
do{
cout << endl << "command:> ";
string cmdStr1="";
cin.ignore();
getline(cin, cmdStr1);
cout << "cin= " << cmdStr1 << endl; //For Debuging
//...more code here
}while(1);
输出是:
命令产品:&gt;正
cin = pos
命令产品:&gt; pos ...从第二个循环开始删除第一个字符
cin = os
...
如果&#34; cin.ignore();&#34;被评论然后它导致了一个&#34;分段错误&#34;:
命令产品:&gt; cin =
分段错误
为我工作的解决方案:
移动&#34; cin.ignore();&#34;在do-while循环之前的行。
cin.ignore();
do{
std::cout << endl << "command:> ";
std::string cmdStr1="";
std::getline(std::cin, cmdStr1);
std::cout << "cin= " << cmdStr1 << endl; //For Debuging
//...more code here
}while(1);
输出是:
命令产品:&gt;正
cin = pos
命令产品:&gt; pos
cin = pos
...
...
P.S。将代码放在这里真是难以置信......我很失望继续合作。