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

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

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

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

Q&A

解決済

1回答

1465閲覧

関数から出れないエラーについて

aiouongaku

総合スコア1

C++

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

0グッド

0クリップ

投稿2020/06/17 15:12

編集2020/06/17 15:24

前提・実現したいこと

C++初心者です。
File()関数内で処理を行い、その後元のmain()関数内に戻ることができません。
元々存在しているプログラムに沿って書き直しを行っています。
そこまで大幅に変更していないのに上手くいきません。
何か解決策などあれば教えていただきたいです。

該当のソースコード

C++

1void main(void){ 2 int flag = 0; 3 DataRead dataread; 4 flag = dataread.File(); 5 std::cout << "flag:" << flag << std::endl; 6} 7 8int DataRead::File(){ 9 int num; 10 double a[2] = { 0 }; 11 //csvファイル内のデータを配列に格納する処理(ファイルオープンは別関数内でしている。問題なしです。) 12 fscanf_s(ファイル," %lf ,%lf ,%lf ¥n " ,a[0] ,a[1] ,a[2]); 13 14 if((a[0] == 0 && a[2] != 0) || (a[0] != 0 && a[2] == 0)) num = -1; 15 else if(a[0] != 0 && a[2] != 0) num = 1; 16 else num = 0; 17 18 aa = a[0]; 19 bb = a[1]; 20 cc = a[2]; 21 22 return num; 23} 24 25 26class DataRead{ 27 private: 28 double aa; 29 double bb; 30 double cc; 31 32 public 33 //getter,setterが存在(省略) 34} 35 36/* 37int DataRead::File(){ 38 int num; 39 double a[2] = { 0 }; 40 //csvファイル内のデータを配列に格納する処理(ファイルオープンは別関数内でしている。問題なしです。) 41 fscanf_s(ファイル," %lf ,%lf ,%lf ¥n " ,a[0] ,a[1] ,a[2]); 42 43 if((a[0] == 0 && a[2] != 0) || (a[0] != 0 && a[2] == 0)) return -1; 44 else if(a[0] != 0 && a[2] != 0) return 1; 45 46 aa = a[0]; 47 bb = a[1]; 48 cc = a[2]; 49 50 return 0; 51} 52*/ 53

実行自体はできますが、main関数内の std::cout << "flag:" << flag << std::endl; が表示されずに終了してしまいます。

試したこと

numには正しく値が入っていました。(それぞれの場合 -1,0,1)
コメントになっている int DataRead::File() のように num ではなく、return してしまう方法も試しましたが結果は同じでstd::cout << "flag:" << flag << std::endl; が表示されませんでした。

これで伝わるかすごく不安ですが、何か上手くいかない理由になりそうなことを教えていただければ嬉しいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

  • double a[2] = { 0 };で宣言している配列aのサイズが2なので
a[0]←OK a[1]←OK a[2]←存在しない

double a[3] = {0};とすべき

  • fscanfの使い方がちょっと違う
fscanf_s(ファイル," %lf ,%lf ,%lf ¥n " ,&a[0] ,&a[1] ,&a[2]); // & をつける

aのサイズ2のままa[2]にアクセスしててコンパイル通るんですかね?
以上、正確性に欠ける説明かもしれませんがm(_ _)m

投稿2020/06/17 15:53

ohys

総合スコア147

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

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

aiouongaku

2020/06/17 16:00

配列のサイズが問題でした! &は実際はつけていましたが記入ミスでした。ご指摘ありがとうございます。 問題なく実行できました!ありがとうございます!m(_ _)m
ohys

2020/06/17 16:03

解決してよかったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問