如何将文本文件导入到结构C ++中

时间:2015-03-10 22:50:57

标签: c++

我正在尝试将数据从文本文件导入到结构中以供使用,因为我真的不想将它们导入单独的数组。 我一直得到“错误:在每个getline上'''token'之前预期的primary-expression,我在C ++上很糟糕,并且基本上使用我必须尝试的C技能来理解这一点。我做错了什么?

#include <stdio.h>
#include<fstream>
#include <cstdlib>
 #include <iostream>
#include "Ladybird.h"
using namespace std;



typedef struct managerImport{
    int gridSizeA;
    int gridSizeB;
    int aphidCount;
    int aphidPos;
    int ladyCount;
    int ladyPos;
    struct managerImport *next;
};

void importData(managerImport[]){

ifstream manager;
    manager.open("Manager.txt");
     if (!manager.fail()){

         //loops the 2d array
       for (int i = 0; i < 1; i++)
       { 
          getline(manager, managerImport[i].gridSizeA, managerImport[i].gridSizeB);
       }

       //loop the lady bird count
       for (int i = 1; i < 2; i++)
       { 
          getline(manager, managerImport[i].ladyCount);
       }

       //loops the lady bird coordinates
       for (int i = 2; i < 10; i++)
       { 
          getline(manager, managerImport[i].ladyPos);
       }

       for (int i = 10; i < 11; i++)
       { 
          getline(manager, managerImport[i].aphidCount);
       }

       //loops the lady bird coordinates
       for (int i = 11; i < 19; i++)
       { 
          getline(manager, managerImport[i].aphidPos);
       }
     }


   manager.close();

}


int main() {

  //importing the manager text file

importData;
}

2 个答案:

答案 0 :(得分:1)

您是否在函数中命名参数?

void importData(managerImport [])只是说你有一个函数importData,它接受一个类型为managerImport(你的结构)的数组。

编辑澄清: 想象一下,我写这段代码: int increment(int){return int + 1; }

我所做的是为编译器提供一个带参数“int”的函数。 “int”是我的论证的类型还是名称?这显然不会编译,因为参数必须同时具有类型和名称(所以即使我想要将我的参数命名为“int”(不建议),我仍然需要提供一个说“int”的类型实际上是(类型)。它是一个long,一个字符串,一个unsigned char?假设我的意思是接受一个int,加1,并返回递增的值(一个int),这就是我应该写的: int increment(int i){return i + 1; }

所以,在你的情况下,你有: void importData(managerImport []){...}

显然,你的意思是接受一个managerImport数组,但你没有给该数组命名。试试这个: void importData(managerImport foo []){..}

另外,除非你真的需要一个c-array,否则你可以尝试使用vector或C ++数组(std :: array)。

答案 1 :(得分:0)

函数getline不会将文本转换为整数。它只是复制文本而不进行翻译。

for (int i = 0; i < 1; i++)
{ 
  getline(manager, managerImport[i].gridSizeA, managerImport[i].gridSizeB);
}

您的getline函数调用转换为getline(stream, int, int);

您需要使用:

  manager >> managerImport[i].gridSizeA >> managerImport[i].gridSizeB;

或以字符串形式读入并解析出字符串。