Как преобразовать ввод текстового файла в массив в C ++ - PullRequest
0 голосов
/ 13 апреля 2020

Привет, у меня есть текстовый файл в формате phonenumber housenumber имя имя фамилия

Я пытаюсь прочитать все данные и сохранить их в массиве. Я использовал код ниже. Но он читает только данные первой строки. Может кто-нибудь помочь мне, почему это происходит.

#include <iostream>
#include <iomanip>
#include <fstream>
#include <string.h>
#define Size 200

unsigned long long int mobilenumber[Size];
char seatnumber[Size][4];
char firstname[Size][30],lastname[Size][30];

using namespace std;
int main()
{
    //delcares the files needed for input and output//
    ifstream infile;
    ofstream outfile;

    infile.open("reservations.txt",ios::in);
    //opens files needed for output//
    outfile.open("pricing.txt");
    int i=0;
    if (infile.is_open())
    {
        infile>> mobilenumber[i]>>seatnumber[i]>>firstname[i]>>lastname[i];
        i++;
        numberofbooking++;
    }
    infile.close();
    for(int i=0;i<=numberofbooking;i++)
    {
    cout<< mobilenumber[i]<<" "<< seatnumber[i]<<" "<< firstname[i]<<" "<< lastname[i];
    }
return 0;
}

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Причина, по которой он читает только одну строку данных, заключается в том, что это все, что вы сказали ему делать. Здесь:

...
 if (infile.is_open())
    {
        infile>> mobilenumber[i]>>seatnumber[i]>>firstname[i]>>lastname[i];
        i++;
        numberofbooking++;
    }
...

Это будет запускаться один раз , я думаю, что вы имели в виду некоторое время l oop:

while  (infile>> mobilenumber[i]>>seatnumber[i]>>firstname[i]>>lastname[i])
    {

        i++;
        numberofbooking++;
    }

Это будет делать то, что вы хотите До тех пор, пока 0 <= i <= 199, если i находится вне этого диапазона, вы получите неопределенное поведение.

0 голосов
/ 13 апреля 2020

Если у вас нет данных больше 200 в файле данных, или ваша программа потерпит неудачу.

Вы читаете из файла только один раз, поэтому получаете данные только первой строки. Вам нужно красный от файла до EOF. добавить некоторое время l oop внутрь if (infile.is_open ()) {}. Читайте до EOF, как показано ниже.

if (infile.is_open())
        {
            while (infile >> mobilenumber[i] >> seatnumber[i] >> firstname[i] >> lastname[i]) {
                cout << "Reading file" << endl;
                i++;
                numberofbooking++;
            }
        }

Я не вижу никакой пользы от i ++, кроме индексации. Я думаю, что вы также можете использовать numberofbooking для индексации.

Каждый раз, когда вы сталкиваетесь с такими проблемами, попробуйте добавить журналы, чтобы проверить, что происходит, или использовать отладчик. Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...