Входной файл для нескольких массивов в C ++

0

У меня два файла, и я должен ввести их оба в массивы. Один из них является:

2
3
4
5
7
8

Второй -

2
4
5
6
7
8
2
3
4
5
7
8

(это намного дольше, но это не имеет значения). Мне нужно иметь один массив с первыми 6 числами, а затем я должен проверить, совпадают ли первые шесть номеров со вторым файлом, такие как числа во втором массиве, то же самое со следующими шестью числами и т.д. (Например, проверка для победителя лотереи). Я предполагаю, что я должен загружать числа из одного файла в несколько массивов, но я понятия не имею, как это сделать, и я не могу найти его нигде.

Код для первого массива, который у меня есть до сих пор:

#include<iostream>
#include<fstream>
using namespace std;
int main(){
int numbers[6];
int count = 0;
ifstream inputFile;
inputFile.open("Numbers.txt");
while (count < 20 && inputFile >> numbers[6]){
    count++;
    inputFile.close();
    for (count=0; count < 20; count++)
    cout << numbers[count];}
    return 0;
    }

Другая проблема заключается в том, что вместо правильного отображения чисел он отображает "-858993460" 6 раз - хотя мой код в основном копируется из книги...

Что не так с моим кодом и как я могу ввести второй файл?

  • 1
    проверьте свой код против книги снова ...
  • 0
    также, если у вас есть книга, она должна объяснить это довольно четко
Показать ещё 8 комментариев
Теги:
arrays

2 ответа

1

Ваша основная проблема заключается в том, чтобы делать вещи внутри вашей циклы, которых не должно быть. Предполагается, что цикл запускается один раз для каждого значения, которое он считывает из файла. После того, как это будет закончено, вы должны закрыть файл и распечатать результаты.

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    int numbers[6];
    int count = 0;

    ifstream inputFile;
    inputFile.open("Numbers.txt");

    if(!inputFile.is_open()) // always check for errors
    {
        std::cerr << "ERROR opening input file:" << std::endl;
        return 1; // error
    }

    // make sure count < 6 so you don't overflow your array
    while(count < 6 && inputFile >> numbers[count])
    {
        count++;
        // inputFile.close(); // don't close the file yet!!
        //for(count = 0; count < 20; count++) // don't output yet!!
        //  cout << numbers[count];
    }

    // now close your file and output what you have

    inputFile.close();

    for(count = 0; count < 6 /* not 20!! */; count++) // don't output yet!!
        cout << numbers[count] << '\n';

    return 0;
}
0

Это пример чтения чисел из вашего первого файла. Этот пример может быть добавлен, чтобы читать числа из вашего второго файла и сравнивать их с числами, считанными из первого файла.

Обновлено:

#include <iostream>
#include <fstream>

using namespace std;

int main() {
    int numbers[6];
    int count = 0;
    ifstream inputFile;

    inputFile.open("Numbers.txt");

    // get each number from the file until the end-of-file bit
    // is retrieved.
    while ((inputFile >> numbers[count]) && (count < 6)){
        // iterate count by one
        count++;
    }

    inputFile.close();

    // run through the array of numbers and ouput each index
    for(int i = 0; i < 6; i++) {
        cout << "numbers["  << i  << "] = " << numbers[i] << "\n";
    }
}

Вход: "Numbers.txt"

2
3
4
5
7
8

Выход: cout

numbers[0] = 2
numbers[1] = 3
numbers[2] = 4
numbers[3] = 5
numbers[4] = 7
numbers[5] = 8

Обновить:

Неисправный ввод:

d
3
4
5
7
8

Вывод

numbers[0] = 0
numbers[1] = 0
numbers[2] = -1527900896
numbers[3] = 32627
numbers[4] = -1527901752
numbers[5] = 32627
  • 0
    Вы не должны зацикливаться на eof() : stackoverflow.com/questions/5605125/… Также getline() не работает так.
  • 0
    Этот код дает мне ошибку «нет экземпляра перегруженной функции» в inputFile.getline ().
Показать ещё 8 комментариев

Ещё вопросы

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