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

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

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

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

Q&A

解決済

2回答

2746閲覧

半角スペース区切りの文字を数える

bigbox267

総合スコア31

C++

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

0グッド

0クリップ

投稿2017/02/26 08:54

vs2015を使用して半角スペース区切りで入力された文字の数(例えばT T Y Y T Y T T T Yような入力)を数えるため

#include <iostream> using namespace std; int main() { char c; int count=0; while (cin >> c) { count++; } cout << count << endl; return 0; }

このようなコードを書きました

コンソールで適当な数の文字を半角スペース区切りで入力した後Enterを押しても改行されるだけでループから抜け出せなくて困っています

試しに、Ctrl + c
を入力したところ例外が発生しました
イメージ説明

この場合、どのように修正すればいいのでしょうか?

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

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

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

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

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

guest

回答2

0

C++とあるのでCらしいコードに拘らないのであれば

vector<string> split(string &str, char sep) { vector<string> v; stringstream ss(str); string buffer; while (getline(ss, buffer, sep)) { v.push_back(buffer); } return v; } int main() { string str; char sep = ' '; getline(cin, str); cout << str << " <---> " << str.size() << endl; vector<string> v = split(str, sep); for (int i = 0; i < (int)v.size();++i) { cout << v[i] << " <---> " << v[i].size() << endl; } system("pause"); return 0; }

こんな感じでも。
追記:画面を単純に止めたかったんですね。returnの前にsystem("pause"); でもOKです。

投稿2017/02/26 10:12

編集2017/02/26 10:25
kyunta

総合スコア350

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

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

bigbox267

2017/02/26 10:34

そのような方法もあるのですね 勉強になります ありがとうございました
guest

0

ベストアンサー

こんにちは。

標準入力からの読み出しを終了させる方法はいくつかあります。
お手軽なものは、標準入力をEOF(End of file)の状態にするためにCtrl+Z[Enter]とすると簡単です。
現状のプログラムのままでcinがeof状態になるので、ループを終了します。

投稿2017/02/26 09:18

Chironian

総合スコア23272

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

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

bigbox267

2017/02/26 09:33

回答ありがとうございます。 無事にループを抜けることができました しかし、出力が正しいかどうか確認するために int n; cin >> n; この2行を出力の後に追加したのですが、入力待ち状態にならずに終了してしまいます。
Chironian

2017/02/26 09:53

やったことはないので外しているかもしれませんが、強制的にeof状態をクリアすれば通るかも知れません。 下記でやってみて下さい。 cin.clear(); int n; cin >> n; でも、EOFのクリアはあまり好ましい操作ではないです。 真面目に入力終了条件を定めて、それを判定できるような方法で入力させた方が好ましいです。 読み出せた文字が特定の文字(例えば'!')だったら入力終了などは簡単です。 特殊文字('\n'など)の場合はそれなりに面倒なことをする必要があります。
bigbox267

2017/02/26 10:07

出力した後に、すぐに終了するのを止められれば別の方法でもいいのですが
Chironian

2017/02/26 10:16 編集

ああ、ウィンドウが閉じるのを防ぎたいのですね。 Visual StudioならCtrl+F5で起動すればウィンドウは自動では閉じないですよ。 もしくは、コマンド・プロンプトで実行しても良いです。
bigbox267

2017/02/26 10:32

おおー!! 今までずっと、上記の方法でコンソールが閉じるのを止めました。 こんな方法があったとは! ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問