Я уверен, что это общий вопрос, но я не могу найти пример, похожий на мой, поэтому.. У меня есть текстовый файл с именем 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 для вычисления новых данных. Я думаю, что я делаю это неправильно для этого. Любая помощь? Благодарю!
объявлять переменную строки
int n, line = 0;
std::string value;
данные надлежащей загрузки:
getline (myfile,value);
PA[line] = atof(value.c_str());
cout << PA[line]<< endl;
line++;
Вам нужно объявить переменную, которую вы назвали "строка" следующим образом:
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, который не должен жестко закодирован, кстати).
Также обратите внимание, что вы не должны печатать результат, если сбой доступа к файлу.
переменная строка здесь
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 элементов.