我刚开始学习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);
如果您调用 ignore 函数时没有传递任何参数,它会默认忽略输入中的一个字符 '1'。在这种情况下,它忽略了 'J'。移除 ignore 调用,您将得到 'Jim'。
getline
之前,你是否有调用operator>>
?例如:cin >> something;
?请参考这个问题,了解为什么在那种情况下调用ignore
是正确的,但在这种情况下不是。 - Benjamin Lindley只需删除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);
输出结果为:
命令:> pos
输入= pos
命令:> pos ... 从第二个循环开始删除第一个字符
输入= os
...
如果注释了 "cin.ignore();",则会导致 "segmentation fault" 错误: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);
输出结果为:
命令:> pos
输入= pos
命令:> pos
输入= pos
...
...
顺便说一句,把代码放在这里真的很难...我很失望,无法继续合作。
std::string
和std::getline
。它们会让你的生活变得更加轻松。而且,当你刚开始学习时,不必担心它们是如何工作的,但仍然要继续使用它们。 - chrisstd::string
之前,什么样的类使用字符数组(或者请不要说你使用指针)? - chris