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

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

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

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

C++

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

Q&A

解決済

1回答

414閲覧

xmlの値を配列に格納して表示させるプログラムを作りたいです

ag_ns_gt

総合スコア15

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

C++

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

0グッド

0クリップ

投稿2018/11/08 08:45

編集2018/11/08 09:34

xml

1<?xml version="1.0" encoding="utf-8"?> 2<faces> 3 <face id='0'> 4 <bounds x='41' y='49' width='426' height='426'/> 5 <right-eye x='161' y='208'/> 6 <left-eye x='336' y='208'/> 7 <features s-avg='0.76' s-min='0.40' s-max='0.93'> 8 <point id='PR' x='167' y='204' s='0.86'/> 9 <point id='F5' x='115' y='406' s='0.83'/> 10 <point id='F7' x='382' y='407' s='0.83'/> 11 </features> 12 </face> 13</faces> 14

c++

1struct Book { 2 std::string y; 3 std::string x; 4 5 Book() {} 6 7 Book(const Book& other) 8 : x(other.x),y(other.y) {} 9 10 Book(const std::string& x, const std::string& y) 11 : x(x),y(y){} 12 13 void print() const 14 { 15 std::cout << x << "," << y << std::endl; 16 } 17}; 18 19 20 21 22void load(const std::string& filename) 23{ 24 using boost::property_tree::ptree; 25 26 std::vector<Book> books; 27 28 ptree pt; 29 read_xml(filename, pt); 30 int i = 0; 31 char x[50], y[50]; 32 BOOST_FOREACH(const ptree::value_type& child_, pt.get_child("faces.face.features")) { 33 if (child_.first == "point") { 34 books.emplace_back(child_.second.get<std::string>("<xmlattr>.x"), child_.second.get<std::string>("<xmlattr>.y")); 35 x[i] = child_.second.get<char>("<xmlattr>.x"); 36 y[i] = child_.second.get<char>("<xmlattr>.y"); 37 i = i + 1; 38 printf("%s,%s", x[i], y[i]); 39 } 40 } 41 42} 43int main(int argc, char *argv[]) 44{ 45load("parts.xml"); 46return 0; 47} 48

このようにするとハンドルされていない例外が出てきてしまいます。
環境はvisual studio2017 15.8.1です。
プログラミング初心者なのでかみ砕いて教えていただけるとありがたいです。
よろしくお願いします。
x[i] = child_.second.get<char>("<xmlattr>.x");
の後にprintf("a")をすると表示されなくなるので、ここがおかしいようです。
x[i] = child_.second.get<char>("<xmlattr>.x");
のcharをdoubleにしてみると例外は消えるのですが文字化けしてしまいます。

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

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

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

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

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

guest

回答1

0

ベストアンサー

デバッグ実行でどの行から例外が飛んだか、またその時の関係する変数の中身を見るなどしてください。

投稿2018/11/08 09:01

yumetodo

総合スコア5850

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

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

ag_ns_gt

2018/11/08 09:12

x[i] = child_.second.get<char>("<xmlattr>.x"); この行から例外に飛んでいるみたいです。
yumetodo

2018/11/08 09:31

ということは child_.second.get<std::string>("<xmlattr>.x") には成功しているということですよね? すると単にその値がcharに変換できないということではないですか? そもそもなんでcharに変換しようとしているのかわからないのですが。
ag_ns_gt

2018/11/08 09:46

books.emplace_back(child_.second.get<std::string>("<xmlattr>.x"), child_.second.get<std::string>("<xmlattr>.y")); を books.emplace_back(x[i] = child_.second.get<std::string>("<xmlattr>.x"), y[i] = child_.second.get<std::string>("<xmlattr>.y")); アドバイスを元にこのように書き換えてみると例外は出なくなりました. ありがとうございます。 char x[50], y[50];も std::string x[50], y[50]; に書き換えました。 すると文字化けしてしまいます。 printfを%d,%f,%s,%lf,で試してみましたがすべて文字化けしてしまいました. printfがおかしいのかそもそもprintf以前のところがおかしいのかわからないので教えていただきたいです。
yumetodo

2018/11/08 09:49

文字化けというのは具体的にどういうことでしょうか?また具体的にprintfをどのように記述したのか教えてください。
ag_ns_gt

2018/11/08 09:51

%sにして&x[i]にするとできました! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問