#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
.