Входные числа из текстового файла в массив

0

Я уверен, что это общий вопрос, но я не могу найти пример, похожий на мой, поэтому.. У меня есть текстовый файл с именем input.txt, который имеет: 0.0001234 1.0005434 0.0005678 1.0023423 0.00063452 1.0001546 0.00074321 1.00017654 в нем. Теперь я хочу написать программу для чтения этого массива, а затем быстро проверить, что это сработало. Пока у меня есть:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main ()
{
    double PA[8];
    int n;
    ifstream myfile ("input.txt");
    if (myfile.is_open())
    {
        while (! myfile.eof() )
        {
            getline (myfile,line);
            cout << PA[line]<< endl;

        }
        myfile.close();
    }
    else cout << "Unable to open file";
    for (n=0; n<8; n++) // to print the array, to check my work
    {
         cout << " {" << PA[n] << "} ";
}

    system("PAUSE");
    return 0;
}

Моя проблема до сих пор заключается в том, что я продолжаю получать ошибку: строка не была объявлена. И я хочу использовать массив позже с float для вычисления новых данных. Я думаю, что я делаю это неправильно для этого. Любая помощь? Благодарю!

Теги:
arrays
text
fstream

3 ответа

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

объявлять переменную строки

int n, line = 0;
std::string value;

данные надлежащей загрузки:

getline (myfile,value);
PA[line] = atof(value.c_str());
cout << PA[line]<< endl;
line++;
  • 0
    Что вы подразумеваете под загрузкой данных?
  • 0
    загрузить данные из входного файла в массив двойников (код блока между while (! myfile.eof ()) {...})
Показать ещё 1 комментарий
0

Вам нужно объявить переменную, которую вы назвали "строка" следующим образом:

   int i=0;

   while (! myfile.eof() && i<8)
    {
        std::string line; // this was the missing statement

        getline (myfile,line);

        double value = atof(line.c_str()); // convert line form char* to double

        PA[i++] = value;

        cout << value << endl;

    }

Обратите внимание, что вам нужно преобразовать строку как двойную и использовать переменную инкремента "i" (например, как и я. Не забудьте переполнять емкость PA, проверив я снова размер (в настоящее время 8, который не должен жестко закодирован, кстати).

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

0

переменная строка здесь

cout << PA[line]<< endl;

не объявляется. и если вы его объявите, вы также должны дать ему значение, иначе оно не определено и PA[line] не определено, другими словами: сбой.

весь блок while кажется подозрительным:

while (! myfile.eof() )
{
    getline (myfile,line);
    cout << PA[line]<< endl;

}

вы уверены в вызове getline?

Я знаю ссылку с этой подписью:

ssize_t getline(char **lineptr, size_t *n, FILE *stream);

и это даже не соответствует количеству аргументов в вашей версии.

если ваш входной файл имеет более 8 строк на входе, то цикл while будет иметь много взаимодействий - и ваш массив имеет только пространство для 8 элементов.

Ещё вопросы

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