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

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

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

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

C++

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

Q&A

解決済

5回答

2971閲覧

gotoの部分をforかloopで置き換えて同じような結果になるプログラムをくみたいです。

carnage0216

総合スコア194

C

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

C++

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

0グッド

0クリップ

投稿2018/04/06 06:05

#include <stdio.h> int main(){ int i = 0; _loop: i++; printf("%d\n",i); if(i < 10 ){ goto _loop; } return 0; }

勉強がてら以上のプログラムをhttps://codeiq.jp/challenge/2518のサイトから持ってきたのですがどうといてよいかわかりません。
変数iに0から+1増えていき、9に達したら再び0になるのはわかるのですが、gotoの部分をどう置き換えればよいかわかりません。
またなぜloopではなく_loopなのでしょうか?
ただ、答えを書いてしまうとcodeiqさんに申し訳ないのでヒントを頂けないでしょうか?
どうかよろしくお願いいたします。

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

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

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

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

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

guest

回答5

0

変数iに0から+1増えていき、9に達したら再び0になるのはわかるのですが

ちがうよ? 10になったら終了するだけだよ。

またなぜloopではなく_loopなのでしょうか?

意味なんてないよ。ruupu でも loooooop でも _ でも、keywordでない限りなんでもかまわない。

ヒントを頂けないでしょうか?

i++;
printf("%d\n",i);
を、i < 10 である間繰り返せ。

投稿2018/04/06 06:09

編集2018/04/06 06:17
episteme

総合スコア16614

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

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

0

C++でループ(繰り返し)実行する構文には、"for", "while", "do while" の3種類があります。

題意は、「元のコードをいずれかのループ構文を使って、同じ動作をするように書き直せ」ということですから
1)元のプログラムの動作を理解する
2)いずれかのループ構文を使ってコードを書き、元のプログラムの動作と比較する。
3)同じ動作をするコードが書けたら、おしまい。動作が違うなら、2)に戻って別のループ構文でコードを書く。
というような手順で解いてゆくのが素直だと思います。

投稿2018/04/06 06:45

coco_bauer

総合スコア6915

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

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

0

ベストアンサー

変数iに0から+1増えていき、9に達したら再び0になるのはわかるのですが

ここの認識違いますね。
10に達していなかったら再び_loopから処理を始めるという流れになります。

またなぜloopではなく_loopなのでしょうか?

C言語では予約語にloopはないので、単にラベルだよというのがわかりやすいように名前をつけているのだと思います。

答えを書いてしまうとcodeiqさんに申し訳ないのでヒントを頂けないでしょうか?

for文の使い方を学べばよいでしょう。
基本的な書き方はこんな感じです。

for(i = 0; i < 5; i++)

変数iを0から始めて1ずつカウントアップします。
5より小さい間(つまり4まで)ループを続けます。

投稿2018/04/06 06:14

ttyp03

総合スコア16998

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

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

carnage0216

2018/04/06 07:29 編集

#include <stdio.h> int i (){ for( i=0; i<10; i++ ); printf("%d\n",i); if(i < 10 ){ for(i=0; i<10; i++ ); printf("%d\n",i); } return 0; } と書いてエラーがでました。 何が間違っているかわかりません。 コンパイルエラーが発生したため、ソースコードの実行はされませんでした。 コンパイルエラーが発生したため、ソースコードの実行はされませんでした。 prog.c: In function 'i': prog.c:3:7: error: lvalue required as left operand of assignment for( i=0; i<10; i++ ); ^ prog.c:3:12: warning: comparison between pointer and integer for( i=0; i<10; i++ ); ^ prog.c:3:18: error: lvalue re ...
ttyp03

2018/04/06 07:28 編集

なんでそうなる・・・。 mainがなくなってる。 ループが二重になってる。 ループ内でif文は不要。 int iの宣言はmain関数内で行う。
ttyp03

2018/04/06 07:29

あ、最初のfor文は空ループか。
ttyp03

2018/04/06 07:31

答え書いたほうが早いと思うので書きますよ。 見て学習してください。 #include <stdio.h> int main() { int i; for(i = 1; i <= 10; i++){ printf("%d\n", i); } return 0; }
carnage0216

2018/04/06 07:48

#include <stdio.h> int main(){ int i=0; i<10; i++ ; { for( i=0; i<10; i++ ); printf("%d\n",i); } return 0; } と直したところ出力は10のみでした。or( i=0; i<10; i++ )より1〜10まででないのですか?
ttyp03

2018/04/06 07:51

なぜ同じように書かないのですか? mainのあとの行、int i=0;の後ろは不要。 その次の行の{は不要。 for文がセミコロンで終わっているのでprintfをループで処理していない。 {で終わらせる必要がある。 for文が0から始まっている9で終わる。
carnage0216

2018/04/06 07:54 編集

すいません。返信を見ていませんでした。 決して自分勝手に書いたわけではありません。 申し訳ありません。
ttyp03

2018/04/06 07:56

そうか。それなら仕方なし。 だとしても、もう少し基礎から学びましょうね。 main関数がなかったらおかしいって思わないと。
carnage0216

2018/04/06 07:57

あの、調べてもでてこなかったのですが、i<10とi<=10は同じ働きをするのですか?
carnage0216

2018/04/06 08:00

はい、1から勉強しようとしたサイトは少しハードルが高かったです。 別のサイトで基礎勉強します。
ttyp03

2018/04/06 08:00

i<10 → iが10より小さい i<=10 → iが10以下 調べても出てこないわけないですよ。 例えばこことか。 http://www.c-lang.org/operator.html 比較演算子のとこ見てくださいね。
ttyp03

2018/04/06 08:01

まずは基本的なC言語の文法から始めたほうがよいですよ。
carnage0216

2018/04/06 08:03

どうもありがとうございます。
guest

0

"_loop"は、goto分での飛び先ラベルです。
ラベル名はある程度自由に使えます。
Jumpな命名が好きな人ならjpほにゃならですかね。
_jp1:
//process
if ( ) {
goto _jp2;
}
goto _jp1;
_jp2:

投稿2018/04/06 06:12

YomogiKOBO

総合スコア187

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

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

0

goto というのはどういう動きをするものなのか調べてみましたか?


またなぜloopではなく_loopなのでしょうか?

については、「予約語」「予約語とは」などで検索してみると良いと思います。

【追記】
他の方の回答を見てちょっと思ったので追記します。

ttyp03 さん wrote:

単にラベルだよというのがわかりやすいように

ああ、予約語がどうのというよりは そういう意図ですね。

loop は予約語じゃないからラベルに使えるとしても、
『 ぱっと見 予約語っぽく見える単語は そのまま使うのは抵抗あるので
アンスコ付けたり 分かりやすくしたい 』
という感覚です。

投稿2018/04/06 06:17

編集2018/04/06 06:27
sk_3122

総合スコア1126

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問