質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

3377閲覧

C++ 複数行のtxtファイルを入力

MOTOZOMBIE

総合スコア13

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/01/08 12:24

現在,microsoft Visual studioでC++のコードを書いております.
行いたいことは,複数行のtxtファイルをvector<matrix>型のinfos_1,infos_2それぞれに,情報を入力することです.
詰まっているところは,while (getline(input_file, str_input))の部分で2周までは周るが,その後whileの条件分岐の場面で,ブレークポイントがかかってしまいますところです.

input.txtの内容を「inputtxt」に,ソースコードを「C++」に,coutの内容を「cout」に,ブレークポイントの内容を「break」に記述しております.

inputtxt

10 0 5 4 4 2 20 0 4 2 5 8

C++

1#define _CRT_SECURE_NO_WARNINGS 2#define _USE_MATH_DEFINES 3#include <iostream> 4#include <string> 5#include <cmath> 6#include <fstream> 7#include <vector> 8#include <sstream> 9 10using namespace std; 11 12struct matrix 13{ 14 double x, y, z; 15}; 16 17inline void init(ifstream &input_file, vector<matrix> &infos_1, vector<matrix> &infos_2) 18{ 19 string str_input; 20 string str_split; 21 22 int count_row = 0; 23 24 //行split 25 while (getline(input_file, str_input)) 26 { 27 int count_space = 0; 28 stringstream ss(str_input); 29 30 //空白split 31 while (getline(ss, str_split, ' ')) { 32 switch (count_space) 33 { 34 case(0): 35 infos_1[count_row].x = stod(str_split); 36 break; 37 case(1): 38 infos_1[count_row].y = stod(str_split); 39 break; 40 case(2): 41 infos_1[count_row].z = stod(str_split); 42 break; 43 case(3): 44 infos_2[count_row].x = stod(str_split); 45 break; 46 case(4): 47 infos_2[count_row].y = stod(str_split); 48 break; 49 case(5): 50 infos_2[count_row].z = stod(str_split); 51 break; 52 default: 53 break; 54 } 55 count_space++; 56 } 57 cout << infos_1[count_row].x << infos_1[count_row].y << infos_1[count_row].z; 58 cout << infos_2[count_row].x << infos_2[count_row].y << infos_2[count_row].z << endl; 59 count_row++; 60 } 61} 62 63int main(int argc, char *argv[]) 64{ 65 // ファイル読み込み // 66 ifstream input_file("input.txt"); 67 if (!input_file) { 68 cout << "入力ファイルなし"; 69 cin.get(); 70 return -1; 71 } 72 // 変数 // 73 vector<matrix> infos_1(1); 74 vector<matrix> infos_2(1); 75 76 init(input_file, infos_1, infos_2); 77 78 cin.get(); 79 return 0; 80}

cout

1005442 2004258

break

1ハンドルされない例外が 0x000000007760F302 (ntdll.dll) で発生しました 2(file.exe 内): 0xC0000374: ヒープは壊れています。 (パラメーター: 30x0000000077677C70)。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

infs_1とinfos_2が一つ分のメモリしか確保されていないからでは?
push_back等でvector内のmatrixを増やさないといけないと思います。

投稿2019/01/08 12:57

iwanote

総合スコア295

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MOTOZOMBIE

2019/01/09 02:49

自分も一日経ってからコードを読んで気づき,恥ずかしくなりました.. こんな初歩的な質問にご回答いただきありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問