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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

C++

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

Q&A

解決済

1回答

1406閲覧

char cでの文字入力時の文字数と改行数の計算プログラム

syosinsya9999

総合スコア6

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

C++

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

1グッド

1クリップ

投稿2020/03/10 04:28

編集2020/03/10 04:39
#include<iostream> using namespace std; int main(void){ char c; int ccount = 0; //文字数 int ncount = 0; //改行数 while(cin.get(c)){ ccount++; if(c== '\n') ncount++; } cout << "文字数=" << ccount << '\n'; cout << "改行数=" << ncount << '\n'; return(0); } このプログラムの、 while(cin.get(c)){ ccount++; という所の仕組みが理解できません、 ご教示お願いします。
DrqYuto👍を押しています

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

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

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

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

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

maisumakun

2020/03/10 04:30

どのような点が理解できないのか、もう少し掘り下げていただけませんでしょうか。
退会済みユーザー

退会済みユーザー

2020/03/10 04:35

C# は関係ないようですのでそのタグは外してください。 コードは ``` と ``` で囲ってください。インデントされて見やすくなりますので。
syosinsya9999

2020/03/10 04:36

んー、基本的にプログラムがどうしてこう動くのか?という質問をします。 プログラムがそのように流れる意味を知りたいのです。
syosinsya9999

2020/03/10 04:41

すみません、タグの消し方が解りません、 ここ初めてなので使い方がちょっと解らないです、ごめんなさい。
Y.H.

2020/03/10 04:49

タグの消し方:質問を「編集」して、表示されるタグのxをクリックします。
syosinsya9999

2020/03/10 04:53

Y.H.さんありがとうございます。
Y.H.

2020/03/10 05:25

で、関係ないC#タグは残ったままで修正されないのですね。。。 タグで質問を検索すると関係ないこの質問が引っかかると。
guest

回答1

0

ベストアンサー

まず、whileの後に開き波括弧がありますので、ループは閉じカッコまでが対象となります。

C++

1while(cin.get(c)){ 2 ccount++; 3 if(c== '\n') 4 ncount++; 5}

cin.get(charの変数)は、受け取った文字を変数に入れるとともに、cinそのものを返します。そして、cin自体を条件式に書くと、「cinが終端に達しない間」はtrueとなるので、入力をクローズするまでループが続きます。

投稿2020/03/10 04:44

maisumakun

総合スコア146018

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

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

maisumakun

2020/03/10 04:44

「何がわからないか」がわからないので、この回答でも疑問が残るようでしたら補足いただければと思います。
syosinsya9999

2020/03/10 04:52

回答ありがとうございます、 しかし少し解らなくて申し訳ないのですが、 ccount++;というのはどういう意味ですか?(評価してから1増やすは解るのですが) ifみたいに例えば2が9以上になるまでとか言う時は、終わりが解るのですが、 この終わりのプログラムはどこに書いてあるのでしょうか? 増やしているだけでループが終わった後の文字数を計算するところが解りません・・。
maisumakun

2020/03/10 04:56

> ccount++;というのはどういう意味ですか?(評価してから1増やすは解るのですが) 評価してから1増やす「だけ」です(ループ制御とは無関係です)。ループが1回回るごとに1足されていく、それだけです。 > この終わりのプログラムはどこに書いてあるのでしょうか? 上に回答したように、while(cin.get(c))自体が「入力が終わるまでループする」という意味になります。
maisumakun

2020/03/10 04:59

> 増やしているだけでループが終わった後の文字数を計算するところが解りません・・。 ループが回るたびに1ずつ数えていっているので、ループを抜けた時点で正しい値となっています。後から集計処理を追加する必要はありません。
syosinsya9999

2020/03/10 05:07

char型の仕様を理解していなかったのかもしれません。 char型に入力された文字は全部例えば5文字なら5文字全部文字数として数えられるそういう事ですね。 無知ですみません・・・。
maisumakun

2020/03/10 05:09

はい、1文字ずつ取得していますので、1文字につき1回ループがまわります。
syosinsya9999

2020/03/10 05:11

なるほど、回答ありがとうございました。 ベストアンサーに決めさせて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問