Невозможно, чтобы функция правильно заполняла массив из текстового файла, кажется, пропущена первая строка - PullRequest
0 голосов
/ 22 ноября 2018

Итак, у меня два простых вопроса.Во-первых, моя функция в порядке для чтения текстового файла, состоящего из одного числа в каждой строке, и передачи его в массив внутри main ()?И правильно ли открывается / закрывается текстовый файл или я не понимаю код?

И во-вторых, я не могу заполнить свой массив правильно.Там 92 числа / строки, но я могу только получить 91 элемент.Кажется, пропустить первый номер, но я не уверен, почему.Когда я отлаживаю, я вижу «число», читающее первую строку, но я не знаю, куда оно идет.

Текстовый файл состоит из 92 чисел с десятичными знаками, с числом в каждой строке, подобным этому... и первое число находится в первой строке, между ними нет пробелов и вертикальных пробелов.

31.11

25.22 ...

int getTempData(double temperatures[]) {

    ifstream input("pgm6.txt");

    if (!input) 
        return 1; // closes input file

    string number;

    while (input >> number)

        for (int i = 0; i < 91; i++)

        {
            input >> temperatures[i];
        }
}

иinside main ()

const int ARRAY_SIZE = 91;
double temperatures[ARRAY_SIZE];
getTempData(temperatures);

Редактировать: Большое спасибо за помощь всем.Я усвоил урок неиспользования кода, который я не совсем понимаю отсюда: https://www.reddit.com/r/learnprogramming/comments/2wwv6i/c_creating_writing_to_and_displaying_text_files/

#include <fstream> // Instead of <iostream>
#include <string>
using namespace std; // Nothing too much wrong with this...
int main() {

    ifstream input("input.txt"); // Open the file "input.txt" for reading 
    (if = input file)

    if ( !input ) // Did the file open correctly?
    return 1;

    ifstream output("output.txt"); // Open the file "output.txt" for writing 
    (of = output file)

    if ( !output ) // Did the file open correctly?
    return 1; // C++ automatically closes the input file!

    string word;

    **while ( input >> word )** // Read a word while the file isn't at its 
      end

    output << word << '\n'; // Write the word on its own line

    // C++ automatically closes the output file
   // C++ automatically closes the input file
}

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

То, чего вы пытаетесь достичь, сводится к следующему:

#include <fstream>

int getTempData(double temperatures[]) {
    std::ifstream input("pgm6.txt");

    int i;
    for (i = 0; i < 92 && input >> temperatures[i]; i++) {
        // deliberate empty line
    }
    // input will close file on exiting function
    return i; // returns number of elements found
}


int main() {
    const int ARRAY_SIZE = 92;
    double temperatures[ARRAY_SIZE];
    getTempData(temperatures);
}
0 голосов
/ 22 ноября 2018
while (input >> number)

Это читает первое число и выбрасывает его.Просто удалите эту строку кода.

Кроме того, вам, вероятно, следует добавить проверку ошибок в input >> temperatures[i];.И ваша функция должна что-то возвращать, если все хорошо - в настоящее время в конце нет оператора return.Кроме того, ваш цикл собирает только 91 элемент.

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