2014-12-26 32 views
0

我想阅读以下内容:和单独的阵列的每个值存储在C++

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

文件中有多少行? – P0W

+0

您可能正在获取垃圾值,他们是否是大负数?我会假设你有问题,因为你正在循环我 - > 100,所以如果文件中没有100行,空行将变成垃圾值。 –

+0

请不要另一个。你是否在StackOverflow中搜索“C++读取文件列”? –

回答

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循环会给你null输出,因为没有任何数据被放入数组元素中。我相信这应该纠正你的问题。

你应该注意的另一件事是在行尾有一个额外的空间。这也会让你的程序输出关闭。