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

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

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

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

Q&A

解決済

3回答

955閲覧

c + +についての質問

colorful

総合スコア23

C++

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

0グッド

0クリップ

投稿2019/05/20 12:29

編集2019/05/21 06:04

こんばんは。
現在、C++を勉強しているのですが、演習問題をやっていてエラーが出てしまい、原因が分からずてこづっております。具体的には、ファイルの読み込みは無事にできたのですが、if文での制御がうまく行ってないのか実行を行なうと最後の数字だけがループしてしまいます。
そこで、アドバイスをご教授して頂けると幸いです。

【演習問題】
ファイルの内容を読んで、2で割り切れる場合は「morning!」と表示を行い、3で割り切れる場合は「noon!」と表示を行い、2と3で割り切れる場合は「night!」と表示を行い、それ以外はそのまま数字を表示せよ。

(例)
input:1 2 3 4 5 6 7
output: 1 morning! noon! 4 5 night! 7

【プログラム】
#include<iostream>
using namespace std;

int main()
{
while(1){
int x;
cin >> x;

if(x%2 == 0 && x%3 == 0){ cout << "night!"<<" "; }else if(x%2 == 0){ cout << "morning!"<<" "; }else if(x%3 == 0){ cout << "noon!"<<" "; }else{ cout << x <<" "; } } return 0;

}

返信を下さった皆様へ

返信遅くなってしまい、申し訳ありません。
アドバイスをしていただき、ありがとうございます。おかげさまで解決しました。

ベストアンサーは、皆さんの説明が分かりやすく、迷ったのですが色々悩み決めさせて頂きました。

プログラムの解決に導いてくださり、ありがとうございました。

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

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

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

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

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

maisumakun

2019/05/20 12:32

C++/CLI環境でないなら、タグは「C++」だけのほうが適切かと思います。
colorful

2019/05/20 12:36

ご指摘、ありがとうございます。 タグを修正しました。
colorful

2019/05/20 12:38 編集

またwhile(1)を消した状態でやってみたのですが、最初の1しか表示されず、困っております。
guest

回答3

0

ベストアンサー

cin.eof() で確認とコメントしましたが、再確認したら、
"1 2 3 4 5 6 7 " と最後に空白があると、余分にループが回るので、
cin >> x; --> if (!(cin >> x)) break;
の方が良いかも。

投稿2019/05/20 14:50

pepperleaf

総合スコア6383

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

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

0

一応、以下のように質問者さんとほぼ同じコードを書いたとき、適切な出力が出ました。
環境はwindows10,Visual Stadio 15.8.8です。

#include<iostream> using namespace std; int main() { while (1) { int x; cin >> x; if (x % 2 == 0 && x % 3 == 0) { cout << "night!" << " "; } else if (x % 2 == 0) { cout << "morning!" << " "; } else if (x % 3 == 0) { cout << "noon!" << " "; } else { cout << x << " "; } } return 0; }

投稿2019/05/20 13:35

編集2019/05/20 13:37
amahara_waya

総合スコア1029

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

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

0

こんにちは。

ループの終了条件がないので、最後の数字を読み込んだ後、cint >> x;がひたすらエラーになっている可能性があります。
cin.eof()にて終了判定すればうまくいくかも知れません。

投稿2019/05/20 13:30

Chironian

総合スコア23272

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

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

pepperleaf

2019/05/20 14:04

と思ってやってみたが、 (VS2019 C++) コンソール入力では無理みたいです。 (ただし、ctrl-Z を入れたら、OK)
Chironian

2019/05/20 14:27

コンソール入力だと ctrl-Zなど(OSによる)を押してEOFにする必要がありますね。 ファイルからの入力ということなので、リダイレクトでできるかもと思ってます。(あまり自信はないです。)
pepperleaf

2019/05/20 14:38 編集

cin だったので、コンソールと勘違い。 while() の最後に > if (cin.eof()) break; で、OK でした。(リダイレクトで確認 ... VS2017 Express )
pepperleaf

2019/05/20 14:52

ファイルの最後に余分な空白などがあると NGのようでした。 別途、書きましたが、cin >> x のエラーの方が良さそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問