struct中的char数组删除了第一个字母

时间:2012-11-12 18:15:24

标签: c++ arrays char

我刚开始学习c ++,在整个指针/数组的章节中,我正在尝试编写一些东西以掌握这些概念。我希望我的代码要做的是:1)要求一些学生,2)为每个学生要一个名字,3)在一个结构中为这个学生分配一个ID和名字,4)打印学生ID和姓名用于验证。

问题如下。 比方说,例如,我选择输入3名学生并键入以下名称:

JOHN
GEORGE
NICK

程序打印回来的学生证/姓名将是:

0 JOHN
1 EORGE
2 ICK

它似乎削减了所有名字的第一个字母,但第一个字母。

#include <iostream>
using namespace std;

struct STUDENT
{
char chName[256];
int nID;
};

int main(){

//array tests

int i=0;
int nLoops=0;                   //number entered by user
STUDENT *pnStudents;            //pointer to our student array

cout << "Enter number of students: ";
cin >> nLoops;

pnStudents = new STUDENT[nLoops];

for (i=0 ; i < nLoops ; i++)
{
    cout << endl << "Full Name of Student " << i <<": ";
    cin.ignore();
    cin.getline(pnStudents[i].chName,255);

    pnStudents[i].nID=i;
}

for (i=0 ; i < nLoops ; i++)
{
    cout << pnStudents[i].nID << " " << *pnStudents[i].chName << endl;
}

system("pause");

return 0;
}

2 个答案:

答案 0 :(得分:0)

没有参数的

cin.ignore(); 会从cin丢弃,这是一个大小为1的流。

  

<强> istream的&安培; ignore(streamsize n = 1,int delim = EOF);

     

提取和   discard characters从输入序列中提取字符   抛弃它们。

删除它。这似乎是你的代码中唯一可以吃掉一个角色的东西。此外,如果您需要使用ignore,请使用以下内容:

cin.ignore(256,' ');
            ^   ^   (number of char, delim)

如果您试图忽略您为nLoops输入的字符,则无需在每次迭代中执行此操作。

答案 1 :(得分:0)

for (i=0 ; i < nLoops ; i++)
{
    cout << endl << "Full Name of Student " << i <<": ";
    cin.ignore();
    cin.getline(pnStudents[i].chName,255);

    pnStudents[i].nID=i;
}

在循环的第一次迭代中,ignore()提取通过cin >> nLoops;调用留在流中的新行字符。另一方面,istream::getline()会丢弃尾随'\n',因此每次后续迭代都会等待并丢弃输入的第一个字符。

在循环之前移动cin.ignore()