为什么我的方法不从文件.txt中读取float类型

why does my method not read float type from file .txt

本文关键字:读取 float 类型 txt 文件 我的 方法 为什么      更新时间:2023-10-16

我的输入文件:

QT, Quan Tri, 4
KT, Kinh Te, 4
DT, Dien Tu, 5
MT, My Thuat, 4.5
NN, Ngoai Ngu, 4

我的方法:

void ReadFileDT(fstream &file)
{
    char c;
    CarneerDT dt;
    int i=0;
    int t=0;// position attributes
    int k=0;
    char number[10];
    while(!file.eof())
    {           
        c=file.get(); //get a letter in the file
        //end of line processing
        if(c=='n')
        {
            break;          
        }
        if(c!=',')
        {
            switch(t)
            {
            case 0: dt.id[i++]=c;break;
            case 1: number[k++]=c;break;
            case 2: number[k]=c;number[k+1]='';dt.year=atof(number);t++;break;            
            }
        }
        else
        {
            switch(t)
            {
            case 0:dt.id[i]='';break;
            case 1:number[k]='';strcpy(dt.name,number); k=0;break;        
            }           
            t++;        
        }           
    }
    cout<<endl;
    XuatDT(dt);
}
void ReadAllDT(char *tenfile)
{
    char c;
    fstream file;
    file.open("NganhDT.txt",ios::in);
    if(file.fail())
    {
        cout<<"File Error!";
        exit(1);
    }
    while(!file.eof())
    {
        ReadFileDT(file);       
    }
    file.close();
}

它显示"运行时检查失败#2-变量'number'周围的堆栈已损坏。"并且年份始终等于0.00000000000。第二行我错了吗?

此代码的结构有点错误

    if(c!=',')
    {
        switch(t)
        {
        case 0: dt.id[i++]=c;break;
        case 1: number[k++]=c;break;
        case 2: number[k]=c;number[k+1]='';dt.year=atof(number);t++;break;            
        }
    }
    else
    {
        switch(t)
        {
        case 0:dt.id[i]='';break;
        case 1:number[k]='';strcpy(dt.name,number); k=0;break;        
        }           
        t++;        
    }         

应该是

    if(c!=',')
    {
        switch(t)
        {
        case 0: dt.id[i++]=c;break;
        case 1: number[k++]=c;break;
        case 2: number[k++]=c;break;            
        }
    }
    else
    {
        switch(t)
        {
        case 0:dt.id[i]='';break;
        case 1:number[k]='';strcpy(dt.name,number); k=0;break;        
        case 2: number[k]='';dt.year=atof(number); k=0;break;            
        }           
        t++;        
    }         

但我必须承认,我没有立即明白为什么你的代码会导致堆栈损坏。