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

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

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

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

Q&A

解決済

3回答

557閲覧

c言語のwhileについて

kjhoh

総合スコア4

C

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

0グッド

0クリップ

投稿2023/01/06 09:26

前提

c言語です。

実現したいこと

whileの()の中には条件が入ると考えていたのだが、コード上での二つ目のwhileのカッコ中のckが入って動作しているかが分からない

該当のソースコード

int ck; while(i <= N) { ck = i; sum=0; while(ck) { sum += ck % 10; ck /= 10; } if (A <= sum && sum <= B) { ans += i; } i++; }

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

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

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

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

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

guest

回答3

0

ベストアンサー

whileの()の中には条件が入ると考えていた

より正確(でも公式ドキュメントでは無く感覚的?)には、"条件式" です。
while は () の中の式を評価(計算)して "真" ならループを続けます。変数一つならその値に依って真偽が求まります。
c 言語は 0 を偽、 0 以外を真として扱います。
これらから while(ck) ~ は「 ck が 0 で無い間ループ」という動作になります。

余談になりますが、代入も式のため、条件として == のつもりで = と(代入に)してしまってもコンパイルエラー等にはならず面倒なバグになります。

投稿2023/01/06 10:32

編集2023/01/10 08:45
jimbe

総合スコア12543

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

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

0

回答ではありません

補足です。
せっかくなのでISO Cの仕様も見てみました。売り物ではなく、draftのweb archiveです。

https://web.archive.org/web/20181230041359if_/http://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf

によると

6.8.5 Iteration statements
Syntax
1 iteration-statement:
while ( expression ) statement

4 An iteration statement causes a statement called the loop body to be executed repeatedly until the controlling expression compares equal to 0. The repetition occurs regardless of whether the loop body is entered from the iteration statement or by a jump.

とあるので、ckが0になるまでループ本体のブロックが実行されます。

※whileの中を実行しているかどうかはprintf()を使ったり、デバッガで止めたりすれば分かります。

投稿2023/01/06 11:15

dameo

総合スコア943

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

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

0

C言語では、if文やwhile文は「0以外なら処理を行い、0なら行わない」ということになっています。

投稿2023/01/06 09:35

fiveHundred

総合スコア9774

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問