首页 文章

使用strtok拼接cstrings,仅适用于首次执行循环

提问于
浏览
0

我试图使用strtok将一行读入cstring拼接成单个字符串 . 是的,我知道使用字符串对象可以更轻松地完成此操作,但我不允许使用它们 . 当这段代码执行时,它在第一行完美地工作,然后它继续只对循环的每次迭代在同一行上工作 . 该文件正被成功读入'line'字符数组中,正如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++;
        }
}

2 回答

  • 0

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

  • 2

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

相关问题