Чтение текстового файла для построения графика (c )

#c

#c

Вопрос:

Я новичок в c . Я хочу прочитать этот .txt-файл и отобразить его с помощью c . У меня есть ряд данных, которые выглядят следующим образом.

 4.299999989e 001    -3.682989627e-002   -3.635308705e-003   5.932495371e-002
4.300000089e 001    -2.672462724e-002   -7.527103298e-004   7.454365492e-002
4.300000189e 001    -6.389028858e-003   3.274697345e-003    5.433369055e-002
4.300000289e 001    1.632947288e-002    5.136939231e-003    3.248876333e-002
4.300000389e 001    3.278360888e-002    5.786722526e-003    -1.292655012e-003
4.300000489e 001    3.676251322e-002    3.845411120e-003    -2.506720088e-002
 

Я использую fstream для его открытия и чтения. Однако я получаю ошибку, связанную с проблемой памяти.

Мой код выглядит следующим образом

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

int main(){
char line[50];
fstream file;
file.open ("C\Users\Zhi Sheng\Desktop\Data\example.txt", ios::in );
file.getline(line,50);
cout << line;
file.close();
return 0;
}
 

Могу ли я узнать, что с ним пошло не так?

Комментарии:

1. увеличьте line размер массива символов, но лучше использовать std::getline вместо ifstream.getline

2. Первая строка в вашем примере содержит 76 символов. Каков был ваш результат? Что вы ожидали, что это будет? Хотите ли вы в конечном итоге получить эти числа в плавающем или двойном виде? Почему бы не прочитать их таким образом с самого начала? Вместо того, чтобы говорить "However i been getting error regarding memory problem" , расскажите нам точно, в чем проблема. Будьте конкретны и объясните свою цель, если это то, что вам нужна помощь в реализации.

3. Вероятно, вам следует использовать std::string line; вместо char line[50];

4. или, если в строке всегда есть 4 символа с плавающей запятой, каждый из которых разделен пробелом. std::array<double,4> data; while (file >> data[0] >> data[1] >> data[2] >> data[3]) { // do something with data }

5. Я не знаю, почему @Clifford удалил теги «встроенные системы» и «Code Composer», поскольку они оба имели отношение к этому вопросу, хотя это не было видно из текста вопроса. Это стало очевидным из моего разговора с OP через комментарии. Любой из специалистов по «встроенным системам» и «составителям кода», имеющих опыт работы с Texas Instruments, смог помочь, но удаление этих тегов активно отключило их при этом.

Ответ №1:

Причина может быть в том, что cout он пытается прочитать символы, если не видит char . Но, как и в вашем примере, последнему байту не будет присвоено значение 0 (что означает, что последнего символа не будет ), и он будет удален из массива. Попробуйте увеличить размер буфера хотя бы на единицу и установите значение последнего символа равным .

Редактировать

В вашем конкретном случае, если вы хотите читать данные в виде чисел (а не строк), попробуйте использовать operator >> on doubles:

 double value;
my_stream >> value;
 

при этом будет предпринята попытка ввести в переменную следующее двойное значение value .