Чтение из текстового файла и сохранение каждого значения в отдельных массивах в C ++

0

Я пытаюсь прочитать следующее содержание:

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
    Сколько строк в файлах?
  • 0
    Вы, вероятно, получаете значения мусора, это большие отрицательные числа? Я предполагаю, что у вас есть проблемы, потому что вы зацикливаете i -> 100, поэтому, если в файле нет 100 строк, пустые строки будут мусорными значениями.
Показать ещё 1 комментарий
Теги:
arrays
file

1 ответ

1
Лучший ответ

Там что-то не так с вашим кодом.

Во-первых, вы дважды объявляете numOfPpl. Избавьтесь от второго счета.

Во-вторых, у вас есть 9 категорий ввода (имена, адреса и т.д.), Но ваш текстовый файл имеет 10 строк. Это отключит всю программу.

Третий вопрос: у вас будет ровно 100 строк в файле clients.txt? Если нет, вы должны использовать команду, чтобы заглянуть в следующую строку, чтобы убедиться, что есть еще одна строка ниже. Использование цикла while или do/while, вероятно, будет лучше, если в текстовом файле не будет 100 строк. Что-то вроде

while(infile){
   // retrieve your data
   infile.peek();
}

или использование цикла for

for(int i = 0; infile; i++){
   // retrieve your data
   infile.peek();
}

вероятно, будет лучшим циклом. Опять же, если у вас не будет 100 строк, цикл for даст вам нулевой вывод, потому что в элементы массива не помещаются никакие данные. Я считаю, что это должно исправить ваши проблемы.

Еще одна вещь, за которой вы должны следить, - это дополнительное пространство в конце строки. Это также выведет вашу программу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню