使用C ++中的getline读取数字和名称?

时间:2014-11-12 01:31:39

标签: c++ string pointers input getline

所以我现在已经解决了这个问题好几个小时了,我想得到一些帮助。我明天有一个节目。基本上,我有一个输入文件,其中包含名字和姓氏,然后是四个浮点数。它看起来像这样:

John W.
Smith
78.8 56.5 34.5 23.3
Jane 
Doe
34.5 23.4 35.7 87.0
No
More

我需要将名字和姓氏读成一个指针数组。到目前为止,我只是试图在每一行读取变量“name”,我输出到一个文本文件,看看我是否正在正确读取数据。不幸的是,它在读取浮点数后停止,它不会在下一个名称中读取。

char *newPtr;               
char *nameList[50] = {0};   
char name[15];  
int i = 0; 
infile.getline(name, 15);

while (strcmp (name, "No") != 0)
{
    newPtr = new char[15];
    strcpy(newPtr, name);
    nameList[i] = newPtr;
    infile.getline(name, 15);
    outfile << name << endl;
    i++;
}

到目前为止,输出刚刚出现:

John W。

史密斯

78.8 56.5 34.5 23.3

编辑:循环当前是无限的,但从我的输出中,我知道我还没有真正处理过第二个名字,我停在第一个数字。

如果我能得到一些帮助,那就太好了!我非常局限于我可以使用的功能,我确信我应该在这里使用getline函数,我不能使用任何花哨的东西。

在她的幻灯片中,我的老师在此处提供了此代码,以帮助我们阅读姓名:

char *newPtr;
char *NameList[6] = {0};
char Name[20];
int a = 0;
infile.getline(Name, 20);
while(strcmp(Name, sentinel) != 0)
{
newPtr = new char[20];
strcpy(newPtr,Name);
NameList[a++] = newPtr;
infile.getline(Name,20);
}

我们还没有接受过有关弦乐的教学,我确信我不能使用我们在课堂上没有谈过的内容。感谢所有评论过的人的帮助。

1 个答案:

答案 0 :(得分:0)

你快到了...主要的是你忘了尝试阅读数字。下面的代码会将其读入wxyz,但会忽略它们......您应该对它们执行任何操作,例如:可能为姓氏创建第二个数组,为浮点数创建第三个二维数组,或者为一维数组创建4倍长的数据....

char *nameList[50] = {0};   
char name[15];  
int i = 0; 

while (infile.getline(name, sizeof name) && strcmp(name, "No") != 0)
{
    char* newPtr = new char[sizeof name];
    strcpy(newPtr, name);
    nameList[i] = newPtr;
    double w, x, y, z;
    if (infile.getline(name, sizeof name) && infile >> w >> x >> y >> z)
        outfile << name << endl;
    else
    {
        std::cerr << "missing rest of data for " << nameList[i] << " found\n";
        exit(EXIT_FAILURE)
    }
    i++;
}