Ifstream无法正常工作 [英] Ifstream is not working

查看:88
本文介绍了Ifstream无法正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

#include <fstream>
#include <string>
#include <iostream>
#include "Gyvūnas.h"
#include "Maistas.h"
using namespace std;

//-------------------------------------------------------
const char CFm[] = "Maistas.txt";
const char CFg[] = "Gyvūnai.txt";
const int CMax   = 100;
//-------------------------------------------------------

//--------------------------------------------------------
void Skaityti  (const char CFm[], Maistas M[], int & n);
void Skaityti2 (Gyvūnas G[], int & kg);
//----------------------------------------------------------
int main(){
    setlocale (LC_ALL , "Lithuanian");
    Maistas M[CMax];
    Gyvūnas G[CMax];
    int n;
    int kg;
    Skaityti  (CFm, M, n);
    Skaityti2 (G, kg);
    cout << M[1].ImtiMetus() << " " << n << endl;
    system ("PAUSE");
    return 0;
}
//----------------------------------------------------------
void Skaityti (const char CFm[], Maistas M[], int & n)
{
    string produktas;
    double kiekis;
    int metai;
    int mėnuo;
    int diena;
    ifstream fd(CFm);
    fd >> n;
    for (int i = 0 ; i<=n ; i++){ 
        fd >> produktas >> kiekis >> metai >> mėnuo >> diena;
        M[i].Dėti(produktas, kiekis, metai, mėnuo, diena);
    }
    fd.clear ();
    fd.close();
}
void Skaityti2 (Gyvūnas G[], int & kg)
{
    int narvas;
    string pavadinimas;
    int skaičius;
    int produktas;
    int kiekis;
    int n;
    ifstream fd(CFg);
    fd >> n;
    for (int i = 0 ; i<=kg ; i++){
        fd >> narvas >> pavadinimas >> skaičius >> produktas >> kiekis;
        G[i].Dėti(narvas, pavadinimas, skaičius, produktas, kiekis);
    }
    kg = n;
    fd.close();
}

当我设置断点时,这表明ifstream无法从文件中读取变量n:

When I set breakpoints it shows that in this part ifstream cannot read variable n from file:

 ifstream fd(CFm);
    fd >> n;
    for (int i = 0 ; i<=n ; i++){ 
        fd >> produktas >> kiekis >> metai >> mėnuo >> diena;
        M[i].Dėti(produktas, kiekis, metai, mėnuo, diena);
    }
    fd.clear ();
    fd.close();

错误是:

std :: basic_ios

std::basic_ios

文件缓冲区{_Set_eback = 0xcccccccc _Set_egptr = 0xcccccccc ...} std :: basic_filebuf>

Filebuffer {_Set_eback=0xcccccccc _Set_egptr=0xcccccccc ...} std::basic_filebuf >

推荐答案

尝试将Gyvūnai.txt重命名为Gyvunai.txt. 使用非ascii符号作为变量名和函数名是不好的做法(Dėtiskaičius),尽管Visual Studio允许这样做,但将字符串文字与非ascii符号一起使用甚至更糟-实际的char代码取决于源文件的编码和编译器代码页设置.编译器实际上是UTF-8且可以将ū包含两个字符时,可以将其视为CP1251.

Try rename Gyvūnai.txt to Gyvunai.txt. Using non-ascii symbols as variable-names and function-names is bad practice (Dėti,skaičius), though Visual Studio allow this, using string literals with non-ascii symbols is even worse - actual char code will depend on encoding of source file and compiler code-page settings. Compiler can treat sources as CP1251 when it's actually UTF-8 and have two chars for ū.

这篇关于Ifstream无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆