我刚从 C++ 中的数组开始,但在获取数组的第一个字符时遇到了问题。
这是我的代码,
1- 我输入一个名字,例如“Jim”
char name[30];
cin.ignore();
cin.getline(name, 30);
2-我立即尝试计算数组
cout<<"NAME:"<<name; // THIS PRINTS 'im'
我确信它会打印“J”。我究竟做错了什么?
这是cin.ignore的签名:
istream& ignore (streamsize n = 1, int delim = EOF);
因此,如果您在没有任何参数的情况下调用忽略函数,默认情况下它将忽略输入中的 '1' 字符。在这种情况下,它忽略了“J”。删除忽略呼叫,您将获得“吉姆”。
只需删除 cin.ignore();
这忽略了第一个字符,因此您错过了“J”。
我有这段代码的问题是它在第一个循环后吃掉了第一个字符(第一个循环没问题)
do{
cout << endl << "command:> ";
string cmdStr1="";
cin.ignore();
getline(cin, cmdStr1);
cout << "cin= " << cmdStr1 << endl; //For Debuging
//...more code here
}while(1);
输出是:
命令:> 位置
cin= 位置
command:> pos ... 从第二个循环开始删除第一个字符
cin=os
...
如果“cin.ignore();” 被评论然后导致“分段错误”:
命令:> cin=
分段故障
为我工作的解决方案:
移动“cin.ignore();” 在 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);
输出是:
命令:> 位置
cin= 位置
命令:> 位置
cin= 位置
...
...
PS 在这里放代码真是太难了……我对继续合作感到失望。