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

标签 c++

我的输入文件:

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]='\0';dt.year=atof(number);t++;break;            
            }
        }
        else
        {
            switch(t)
            {
            case 0:dt.id[i]='\0';break;
            case 1:number[k]='\0';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。我在一行中错了吗:“案例 2:number[k]=c;number[k+1]='\0';dt.year=atof(number);t++;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]='\0';dt.year=atof(number);t++;break;            
        }
    }
    else
    {
        switch(t)
        {
        case 0:dt.id[i]='\0';break;
        case 1:number[k]='\0';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]='\0';break;
        case 1:number[k]='\0';strcpy(dt.name,number); k=0;break;        
        case 2: number[k]='\0';dt.year=atof(number); k=0;break;            
        }           
        t++;        
    }         

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

关于c++ - 为什么我的方法不从文件 .txt 中读取 float 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20422211/

相关文章:

c++ - 在默认构造函数签名中返回对象与引用

c++ - 在 C++ 中使用指针或引用作为函数的返回类型是否有经验法则?

c++ - 如何使用 C++ 在 Windows 上检索我的 ISP 的 DNS IP?

c++ - boost::multiprecision::cpp_int 是 POD 吗?

c++ - 如何在 PlaySound 中将字符串作为 WAV 的名称传递?

c++ - 如何仅在值高于或低于特定阈值时读取数据

c++ - 如何在 Windows 上为 MSVS 2010 安装 LAPACK?

c++ - erand48(X) 在 C++ 和 Visual Studio 12 中不起作用

c++ - 列出将所有 setter 函数作为 Qt 中的 SLOTS 的缺点(性能/维护等)?

C++ SDL2 程序在切换循环时崩溃