Ifstream无法正常工作 [英] Ifstream is not working
问题描述
#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ėti
,skaič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屋!