Size: a a a

2020 July 28

D

Dmitriy in supapro.cxx
Петр
Добрый день
Нужно считать csv-файл с тремя столбцами чисел типа double
Использую функцию stod для перевода из string в double
Код не работает, выдает необработанное исключение
Помогите, пожалуйста



#include <iostream>
#include <fstream>
#include <deque>
#include <string>
#include <cstdlib>
using namespace std;
int main() {


ifstream fin;
fin.open("3D_f_try1.csv");
string ap;
string::size_type sz;

 
deque<double> d_Number;
double li1, li2;
char * pEnd;


getline(fin, ap, ';');
do {
 
 li1 = stod(ap.c_str(), &sz);
 li2 = stod(ap.substr(sz));
 d_Number.push_back(li1);
 d_Number.push_back(li2);

 getline(fin, ap, ';');
} while (!fin.eof());
int n = d_Number.size();
for (int i = 0; i < d_Number.size(); ++i)
{
 cout « d_Number.at(i) « " ";
}
cout « n;
system("pause»null");
 
}
В csv разделитель - запятая, а не '\n'
источник

П

Петр in supapro.cxx
Забыл поменять
источник

П

Петр in supapro.cxx
Все равно не работает
источник

D

Dmitriy in supapro.cxx
Петр
Добрый день
Нужно считать csv-файл с тремя столбцами чисел типа double
Использую функцию stod для перевода из string в double
Код не работает, выдает необработанное исключение
Помогите, пожалуйста



#include <iostream>
#include <fstream>
#include <deque>
#include <string>
#include <cstdlib>
using namespace std;
int main() {


ifstream fin;
fin.open("3D_f_try1.csv");
string ap;
string::size_type sz;

 
deque<double> d_Number;
double li1, li2;
char * pEnd;


getline(fin, ap, ';');
do {
 
 li1 = stod(ap.c_str(), &sz);
 li2 = stod(ap.substr(sz));
 d_Number.push_back(li1);
 d_Number.push_back(li2);

 getline(fin, ap, ';');
} while (!fin.eof());
int n = d_Number.size();
for (int i = 0; i < d_Number.size(); ++i)
{
 cout « d_Number.at(i) « " ";
}
cout « n;
system("pause»null");
 
}
Какое исключение выдаётся?
источник

АВ

Александр Водянников... in supapro.cxx
А в отладчике пройтись и посмотреть ?
источник

П

Петр in supapro.cxx
Dmitriy
Какое исключение выдаётся?
В этой строке

li1 = stod(ap.c_str(), &sz);


Возникло необработанное исключение по адресу 0x766D43D2 в Acelerometr 2.0.exe: исключение Microsoft C++: std::invalid_argument по адресу памяти 0x00F7F4B4.
источник

D

Dmitriy in supapro.cxx
Петр
В этой строке

li1 = stod(ap.c_str(), &sz);


Возникло необработанное исключение по адресу 0x766D43D2 в Acelerometr 2.0.exe: исключение Microsoft C++: std::invalid_argument по адресу памяти 0x00F7F4B4.
Смотри в отладчике, что лежит в строке перед конвертацией
источник

АВ

Александр Водянников... in supapro.cxx
а что у тебя в этот момент в ap ?
источник

АВ

Александр Водянников... in supapro.cxx
Выведи если не дружишь с отладчиком, но я этого не понимаю
источник

IZ

Ilia Zviagin in supapro.cxx
Dimmu Borgir
типо в коде хеш  таблицы должно присутствовать
Смешались в кучу кони, люди
И молоток лежит на блюде
источник

П

Петр in supapro.cxx
Александр Водянников
а что у тебя в этот момент в ap ?
В ap лежит  "п»їX"
источник

АВ

Александр Водянников... in supapro.cxx
ну и вот ))
источник

П

Петр in supapro.cxx
И тип у этой переменной
std::basic_string<char,std::char_traits<char>,std::allocator<char> >
источник

MN

Midow Noname in supapro.cxx
`#include <iostream>
#include <cstdlib>   // includes system();
#include <unistd.h>  // includes sleep();
using std::cout;
using std::cin;
using std::endl;

int main() {
 cout << "Clearing the screen in: ";
 for (int i = 5; i > 0; i--) {
   cout << i << " ";
   sleep(1);  // takes seconds

 }
 system("cls");

 return 0;
}`
источник

П

Петр in supapro.cxx
Что это вообще значит? Я не понимаю, помогите, пожалуйста


Вообще, у меня есть работающий код, но он считывает все в int. А у меня файл с дробными значениями


#include <iostream>
#include <fstream>
#include <deque>
#include <string>
#include <cstdlib>
using namespace std;
int main() {


ifstream fin;
fin.open("3D_f_try1.csv"); //открытие файла
string ap;

deque<double> d_Number;
char * pEnd; //переменная типа char


getline(fin, ap, '\n');
do {
 li1 = strtol(ap.c_str(), &pEnd, 10);
 li2 = strtol(pEnd + 1, &pEnd, 10);
 
 d_Number.push_back(li1);
 d_Number.push_back(li2);
 getline(fin, ap, '\n');
} while (!fin.eof());

for (int i = 0; i < d_Number.size(); ++i)
 cout « d_Number.at(i) « " ";
system("pause»null");
}
источник

MN

Midow Noname in supapro.cxx
Midow Noname
`#include <iostream>
#include <cstdlib>   // includes system();
#include <unistd.h>  // includes sleep();
using std::cout;
using std::cin;
using std::endl;

int main() {
 cout << "Clearing the screen in: ";
 for (int i = 5; i > 0; i--) {
   cout << i << " ";
   sleep(1);  // takes seconds

 }
 system("cls");

 return 0;
}`
почему в g++ буфера сразу сбрасываются а в кланг надо вызывать flush
источник

П

Петр in supapro.cxx
В плане?
источник

АВ

Александр Водянников... in supapro.cxx
Ну у тебя я так понимаю совсем не то что надо в данных
источник

AF

Aidar Fattakhov in supapro.cxx
Midow Noname
почему в g++ буфера сразу сбрасываются а в кланг надо вызывать flush
Везде нужно вызывать flush
источник

П

Петр in supapro.cxx
Петр
Что это вообще значит? Я не понимаю, помогите, пожалуйста


Вообще, у меня есть работающий код, но он считывает все в int. А у меня файл с дробными значениями


#include <iostream>
#include <fstream>
#include <deque>
#include <string>
#include <cstdlib>
using namespace std;
int main() {


ifstream fin;
fin.open("3D_f_try1.csv"); //открытие файла
string ap;

deque<double> d_Number;
char * pEnd; //переменная типа char


getline(fin, ap, '\n');
do {
 li1 = strtol(ap.c_str(), &pEnd, 10);
 li2 = strtol(pEnd + 1, &pEnd, 10);
 
 d_Number.push_back(li1);
 d_Number.push_back(li2);
 getline(fin, ap, '\n');
} while (!fin.eof());

for (int i = 0; i < d_Number.size(); ++i)
 cout « d_Number.at(i) « " ";
system("pause»null");
}
Это да, но почему? С целыми числами все работает
источник