0

我正在尝试使用 strtok 将读入 cstring 的行拼接成单个字符串。是的,我知道使用字符串对象可以更轻松地完成此操作,但我不允许使用它们。当此代码执行时,它在第一行完美运行,然后它继续只在循环的每次迭代的同一行上运行。文件被成功读入'line'字符数组veriable,由 cout << line << endl; 证明。然而 strtok 和第二个 while 循环继续分割每次读取的第一行。每行包含一个 first_name last_name ID 和六个等级。我想我会重写它并在空白处使用 getline 定界并读取单个字符串,但是有谁知道为什么 strtok 只在循环的每次连续迭代中拼接第一个字符串?

这是一个代码段,假设所有变量都在别处正确声明

 while(!fin.eof())
    {//while open
    fin.getline(line, 40, '\n');
    cout << line << endl;
    ptr = strtok (line, " ");

    while(ptr != NULL)
        {
        if(c==0)
          sprintf(firstname, "%s", ptr);
        if(c==1)
          sprintf(lastname, "%s", ptr);
        if(c==2)
          sprintf(id, "%s", ptr);
        if(c==3)
          sprintf(grade1, "%s", ptr);
        if(c==4)
          sprintf(grade2, "%s", ptr);
        if(c==5)
          sprintf(grade3, "%s", ptr);
        if(c==6)
          sprintf(grade4, "%s", ptr);
        if(c==7)
          sprintf(grade5, "%s", ptr);
        if(c==8)
          sprintf(grade6, "%s", ptr);
        ptr = strtok (NULL, " ");
        if(ptr == NULL)
          break;
        c++;
        }
}
4

2 回答 2

2

c离开内部循环后,您不会重置变量。

于 2013-02-13T08:11:56.750 回答
0

作为@Joachim Pileborg,主要问题是 reset c。在进入内部循环之前初始化它c=0;else为每个if除了最后一个之外的每个添加和可能更明确。

于 2013-02-13T08:23:05.367 回答