我正在尝试阅读以下内容:
rima doha 44881304 20 30 10 10 20 10102 10102
andrew ny 123456 12 12 13 14 15 01020 03040
将它们存储在单独的数组中,编辑它们,然后再次存储到同一个文件中。
这是我尝试过的代码:
ifstream infile;
infile.open("D:\\customers.txt");
string names[100];
string addresses[100];
int tn[100];
int numCalls[100];
int trunkCalls[100];
int numMobCalls[100];
int isdnNum[100];
int dueD[100];
int paymentD[100];
int numOfPpl = 0;
int numOfPpl = 0;
for(int i=0; i<100; i++){
infile >> names[i] >> addresses[i]>>tn[i]>>numCalls[i]>>trunkCalls[i]>> numMobCalls[i]>> isdnNum[i]>>dueD[i]>>paymentD[i];
numOfPpl++;
}
//Code where some values were edited
ofstream outfile("D:\\customers.txt");
for(int i=0; i<numOfPpl; i++)
{
outfile<<names[i] << "\t" <<addresses[i] << "\t" <<tn[i]<<"\t" <<numCalls[i]<<"\t"
<<trunkCalls[i]<<"\t"<<numMobCalls[i]<<"\t"<<numMobCalls[i]<<"\t"<<isdnNum[i]<<"\t"<<dueD[i]<<"\t"<<paymentD[i]<<endl;
}
outfile.close();
infile.close();
问题是前两行是正确存储的,但文件中有随机值。我该如何解决这个问题?
答案 0 :(得分:1)
您的代码有些问题。
首先,您声明numOfPpl两次。摆脱第二次计数。
其次,您有9个输入类别(名称,地址等),但您的文本文件每行有10个。这会抛出整个程序。
第三个问题是你将在customers.txt中拥有100行吗?如果没有,你应该利用一个命令来查看下一行,以确定下面是否有另一行。如果文本文件中没有100行,则使用while或do / while循环可能会更好。像
这样的东西while(infile){
// retrieve your data
infile.peek();
}
或使用for循环
for(int i = 0; infile; i++){
// retrieve your data
infile.peek();
}
可能是一个更好的循环。同样,如果你不会有100行,for循环将为你提供空输出,因为没有任何数据被放入数组元素。我认为应该纠正你的问题。
你应该注意的另一件事是在一条线的末端有一个额外的空间。那也会关闭你的程序输出。