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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

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

Q&A

解決済

2回答

718閲覧

aを入力した際label5の内容を表示させたいです。

pe-tti

総合スコア10

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

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

0グッド

0クリップ

投稿2020/04/16 14:08

編集2020/04/16 16:16

c,c++
#include "pch.h"
#include <iostream>
#include<stdlib.h>
#include<stdio.h>

int main(void)
{
int a, b, c;
a = 0;
b = 0;
c = 0;

label1: std::cout << "select(0-2)\n" ; std::cout << "0.enter\n"; std::cout << "1.print average\n"; std::cout << "2.quit program\n"; scanf_s("%d",&a); label2: //データの入力 if (a == 0) { std::cout << "enter data\n"; scanf_s("%lf", &b); goto label1; } label3: //平均値を表す if (a == 1) { goto label2; } label4://プログラム終了 if (a == 2) { std::cout << ">\n"; } label5: if (a != 0 && a != 1 && a != 2) { std::cout << "[Please input integer]\n"; }

aを入力した際label5の内容を表示させたいです。
aを入力すると無限にループしてしまいます。
なぜでしょうか?
またaを入力した際にどうすればlabel5の内容を表示させることができるのでしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

質問を編集して、マウスでコードを選択し、<code>ボタンを押してください。

<iostream> の std::cout を使って C++ のコードを書いているのだから、
入力も scanf ではなく、std::cin を使いましょう。

変数名は a, b, c ではなく、意味のある名前にしましょう。

ラベルと goto を使わずに while ループを使いましょう。

エラー処理は難しいので書いてあげます。

C++

1#include <iostream> 2#include <string> 3 4bool error() 5{ 6 if (std::cin) return false; // エラーではない 7 std::cin.clear(); // エラー状態を解除 8 std::string s; 9 getline(std::cin, s); // 入力行を読み捨てる 10 std::cout << "[Error: Please enter a number]\n"; 11 return true; // エラーだった 12} 13 14int main() 15{ 16 int command = 0, num = 0; // 指令、データの個数 17 double data = 0, sum = 0; // データ、データの合計 18 19 while (true) { 20 std::cout << "select(0-2)\n" ; 21 std::cout << "0.enter\n"; 22 std::cout << "1.print average\n"; 23 std::cout << "2.quit program\n"; 24 25 std::cin >> command; 26 if (error()) continue; // エラーなら while に戻る 27 28 if (command == 0) { 29 std::cout << "enter data\n"; 30 std::cin >> data; 31 if (error()) continue; // エラーなら while に戻る 32 sum += data; 33 num++; 34 } 35 else if (command == 1) { 36 std::cout << sum / num << "\n"; // 平均値を表示 37 } 38 else if (command == 2) { 39 std::cout << ">\n"; 40 break; // whileループを抜ける 41 } 42 else { 43 std::cout << "[Please input a number]\n"; 44 } 45 } 46}

投稿2020/04/16 16:08

kazuma-s

総合スコア8224

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

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

pe-tti

2020/04/16 16:25

ご回答並びにご指摘ありがとうございます。 是非参考にさせていただきます。 この度は本当にありがとうございました。
kazuma-s

2020/04/16 16:27

質問を編集して、<code>タグをつけてください。 コードの前の行に ```C++ を挿入し、コードの最後の行の次に ``` を書いてもいいでしょう。
guest

0

scanf_s("%d",&a);

ここでは数値の入力しか行われないので、a は入力できません

投稿2020/04/16 14:56

y_waiwai

総合スコア87774

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

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

pe-tti

2020/04/16 15:28

コメントありがとうございます。 aの入力も可能にするためにはどうすればいいのでしょうか? 教えていただけると幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問