将值分配给文件中的独立char数组

时间:2014-03-13 22:09:17

标签: c++

您好我正在尝试使用日期信息创建一个独立的char数组,因此我可以稍后使用其他变量对其进行排序。数量和销售工作的数组按需要,但我在第66行收到以下错误(item_date [i] = date;):错误:来自' char *'的无效转换到了' char'。有谁知道我怎么解决这个问题?感谢

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>
#include <cmath>
#include <iomanip>
using namespace std;

#define output_bit 1

struct soldItems{
        char date[10];
        int idNum;
        double quantity;
        double sold;

};

int main(int argc, char** argv) {
    const int n=1369;
        soldItems aItem[n];
        char filename[100] = "project.txt";
        double *item_quantity=new double[n];
        double *item_sold=new double[n];
        char *item_date=new char[n];


        FILE *fp;
        char header[100];

        double quantity, sold;
        int idNum;
        char date[10];

        char date_s[10],idNum_s[10], quantity_s[10], sold_s[10];
        int i=0;


        fp=fopen(filename, "r"); 



        if(!fp)
                perror("Double-check your input file");

        if(!feof(fp))
        {
                fscanf(fp, "%s %s %s %s\n", date_s, idNum_s,
                quantity_s, sold_s);
        }

        while(!feof(fp))
        {
                fscanf(fp, "%s %10d %lf %lf\n",
                date, &idNum, &quantity, &sold);


                strcpy(aItem[i].date, date);
                aItem[i].idNum = idNum;
                aItem[i].quantity = quantity;
                aItem[i].sold = sold;



                item_quantity[i]=quantity;
                item_sold[i]=sold;
                item_date[i]=date;
                i++;
        }

        fclose(fp); 

        if (output_bit) 
        { 
                cout<<"The item information is written in a structure array: \n"<<endl;
        }

    return 0;
}

2 个答案:

答案 0 :(得分:1)

您的问题是date的类型为char*,而item_date[i]的类型为char。您正在尝试将字符串加载到字符中,这就是您的错误所在。但是,如果要将item_date声明为字符串数组,则应将其声明为:

char **item_date = new char*[n];

这将创建一个n个字符串数组,每个长度为10.如果您需要不同的长度,请将10替换为其他字符串。

另外,由于你是用C ++编程的,我建议你使用C ++字符串,而不是C风格的字符串(字符数组)。

答案 1 :(得分:0)

因此,如果您想保存字符串,则无法执行此操作

item_date[i]=date;

因为在这里你要为char(一个符号,如&#39; a&#39;)分配一个字符串(或char数组)。 您必须将item_date定义更改为:

char **item_date = new char*[n];

然后在while循环中:

item_date[i] = new char[size]; //size for you is 10

并循环复制从date到item_date [i]

的每个值
for(int j = 0; j< size; ++j){
   item_date[i][j] = date[j];
}

一切都应该有效。