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

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

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

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

C++

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

Q&A

解決済

3回答

610閲覧

入力文字または値が所定のものでなかった場合に入力させなおすにはどうすればいいのでしょうか?

motch_misa_ore

総合スコア15

Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

C++

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

0グッド

0クリップ

投稿2022/12/23 03:44

編集2022/12/23 08:55

質問概要

入力文字または値が所定のものでなかった場合に入力させなおすにはどうすればいいのでしょうか?

実現したいこと

全要素が実数のN*N正方行列に手動で値を入力させるが、
実数以外の値を入力されたときに入力をやり直しさせたい。

該当のソースコード

ソースコードを抜粋して書きます。
コメントアウトで囲った個所に所定の文を書ければいいのですが。

C++

1 2 cout << "x?" << endl; 3 for(i=0;i<N;i++){ 4 for(j=0;j<N;j++){ 5 cout << "x["<< i <<"]["<< j <<"]?----------->"; 6 cin >> x[i][j]; 7 if(/*ここに実数以外が入力されたことを判定する条件を書きたい*/){ 8 cout << "Input only real number!" << endl; 9 /*ここに入力し直しをさせるための構文を書きたい*/ 10 } 11 12 } 13 } 14 cout << endl;

以上よろしくお願いいたします。

20221223追記
皆様のおかげで入力しなおしの条件や動作について少し進展しました。あともう少しのところです。doの{}内をどうにかする必要がありそうです。どうでしょうか…?

C++(改善後)

1cout << "x?" << endl; 2 for(i=0;i<N;i++){ 3 for(j=0;j<N;j++){ 4 do{ 5 cout << "x["<< i <<"]["<< j <<"]?----------->"; 6 cin >> x[i][j]; 7 if(cin.fail()!=0) 8 cout << "Input only number!" << endl; 9 else break; 10 }while(1); 11 12 } 13 } 14 cout << endl;

以下がエラーです。

PS C:\Users\motch\java> g++ Loop1_C++_20221222.cpp -o Loop1_C++_20221222 ; .\Loop1_C++_20221222 Input some real numbers How many rows and columns does the matrix have?3 x? x[0][0]?----------->1 x[0][1]?----------->2 x[0][2]?----------->3 x[1][0]?----------->4 x[1][1]?----------->5 x[1][2]?----------->6 x[2][0]?----------->l Input only number! x[2][0]?----------->Input only number! x[2][0]?----------->Input only number! x[2][0]?----------->Input only number! x[2][0]?----------->Input only number! x[2][0]?----------->Input only number! x[2][0]?----------->Input only number! x[2][0]?----------->Input only number!

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

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

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

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

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

1T2R3M4

2022/12/23 04:17

思考するエンジニアのmotch_misa_oreさんは どのようにアプローチしたのでしょうか。 調べたこと、試したことを質問に追記してください。 ここはメンターサービスを提供するサイトではないですよ。
guest

回答3

0

<cstdlib> の strtod を使うのはどうですか?

C++

1 cout << "x?" << endl; 2 for (int i = 0; i < N; i++) { 3 for (int j = 0; j < N; j++) { 4 while (true) { 5 cout << "x[" << i << "][" << j << "]?----------->"; 6 string s; 7 cin >> s; 8 char *p; 9 x[i][j] = strtod(s.c_str(), &p); 10 if (p > s.c_str()) break; 11 cout << "Input only real number!" << endl; 12 } 13 } 14 }

76.5kg はエラーにしますか?

投稿2022/12/23 05:32

kazuma-s

総合スコア8224

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

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

motch_misa_ore

2022/12/23 08:56

ご回答ありがとうございます。使わなくても解決できそうです。今後参考にさせていただきます。
guest

0

ベストアンサー

動作未検証ですがhow do I validate user input as a double in C++?の回答コードを組み込むことを検討してみてください。

投稿2022/12/23 04:53

can110

総合スコア38266

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

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

motch_misa_ore

2022/12/23 05:17

ありがとうございます!入力しなおす動作は実現できました!あとはどうすれば実数以外の値を入力されたことを認識させるかですね…
can110

2022/12/23 05:32 編集

そのためには「ある文字列から実数に変換するルール」を明確に決める必要があります。 個人的には回答で示している「doubleでとれたらOK」くらいの緩さでいいと思いますが。
motch_misa_ore

2022/12/23 08:29

おっしゃる通りでdouble型以外の値を入力されたときをエラーとします
guest

0

まずはループで何回も入力させるコードを書きましょう

それができたら、入力のあとにOKだったら、ループを抜けるコードを書きます

投稿2022/12/23 04:00

y_waiwai

総合スコア87774

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

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

motch_misa_ore

2022/12/23 04:16

ご回答ありがとうございます。そのOKと判定する条件は具体的にはどうすればいいのでしょうか??
y_waiwai

2022/12/23 04:51

まずは、入力した文字列を実数に変換するコードを書いてみてはどうでしょう その変換が成功したならループを抜ければいいです
motch_misa_ore

2022/12/23 05:18

入力しなおしの部分は何とか実現できそうです。今y_waiwaiさんのおっしゃる条件を検討中です
y_waiwai

2022/12/23 06:32

C++ 実数変換、なんかでぐぐるといろいろでてきますよ
motch_misa_ore

2022/12/23 08:30

正確に説明すると、double型以外の値をどうやって判定するかを検討しています
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問