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

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

ただいまの
回答率

90.61%

  • C

    3563questions

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

ifの適用範囲

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 707

reotantan

score 245

ifの波括弧はputcharも含んでいると思うのですが、なぜpucharはifに縛られないのでしょうか?

’#include<stdio.h>
 int main(void){
int i,no;
printf("type a"); scanf("%d",&no );
if(no>=2){
i=2;
  while(i<=no){
    printf("%d",i );
    i*=2;
}
putchar('\n');
}
  return 0;
}
}
'
コード
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+3

そもそも波括弧の開き(3個あります)と閉じ(4個あります)が、コンパイルは通っていますか?

コンパイルが通っておらず、古いコンパイル結果を実行してしまってはいませんか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/08/25 12:11

    一番最後の閉じ括弧を消しましたが、結果は同じになりました。
    if文の波括弧の中に入っていても作動しないという事はあるんでしょうか?
    1をnoに入れても改行されてしまいます。

    キャンセル

  • 2015/08/25 12:19

    「結果が同じになった」とはどういうことでしょうか?
    やはりコンパイルが通らなかったということでしょうか?

    no==1 ならputcharが呼ばれることはありません。

    キャンセル

  • 2015/08/25 12:22

    それより、デバッガを使っていないご様子ですがputcharが呼ばれたとどのように判断なさったのでしょう。
    改行したと言ってもそれが11行目のputcharによるものとは限りませんよね。

    キャンセル

  • 2015/08/26 13:21

    やっと理解できました。
    何度も答えていただいてありがとうございました。

    キャンセル

0

改行だとわかりづらいので「X」に置換してみました。
入力が1のときXは表示されないと思います。

#include<stdio.h>
int main(void){
    int i,no;
    printf("type a"); scanf("%d",&no );
    if(no>=2){
        i=2;
        while(i<=no){
            printf("%d",i );
            i*=2;
        }
        putchar('X');
    }
    return 0;
} 


コードは 「```」で囲ってください。 編集するとき、上に</>みたいなボタンがあるのでそれ押すと入力されます。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/08/26 13:22

    ありがとうございました、理解が進みました

    キャンセル

0

#include <stdio.h>
int main(void)
{
  int i,inputNo;

  //数値を入力
  printf("type a");
  scanf("%d",&inputNo );

  //入力数値が2以上なら..
  //iが入力値を超えない間、繰り返しiを2倍し続ける
  if(2 <= inputNo)
  {
    i = 2;
    while(i <= inputNo)
    {
      printf("%d ",i ); // iの状態を出力
      i *= 2;
    }
    putchar('\n'); // 最後に改行を入れる
  }

  return 0;
}

これ入力値が2以上の場合に、入力値の範囲の2の階乗を表示するプログラムですよね。
そのことが分かると、2以上を入れた場合には2の階乗の数値が列挙されるので、最後に改行するのが putcharの役目ですよね。

学校の演習かなにかでしたら、処理の中身を分かるまでよく把握することに努めてみましょう。
どうにもわからない場合は以下のことを元に他の処理を考えて、自分で1から書いてみることをお勧めします。

・数値の入力
・入力値の判定
・判定結果を元に、なにか画面に表示する

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/08/26 13:22

    丁寧な回答ありがとうございました。

    キャンセル

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

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    awikのprintf中にあるシングルクオートをエスケープする方法を教えてください。

    awk 'BEGIN {FS=" ";} {printf "'%s' ", $1}' このような行にしたいのですが、下のようにエスケープしても動作しません。 awk 'BEGIN

  • 解決済

    C言語を勉強中です

    C言語の、0の値についての質問です。 現在、勉強中の読んでいるC言語の参考書で下記の様なプログラムがあります。  /*  文字列を走査して表示する  */ #include <s

  • 解決済

    c言語 while文で直角三角形を*で描く

    前提・実現したいことc言語のwhile文(for文はダメ)で*アスタリスクで5行の直角三角形を表示したいです。使わないといけないのが#define ROWS 5 が必須です(学校の

  • 解決済

    while文のなかにif文

    その名の通りwhile文のなかにif文が入っているコードがあったのですが なんだか違和感を感じました。while文の中にif文をいれることってけっこうありますか? 詳しいかた教えて

  • 受付中

    点数別分布グラフ

    点数分布のグラフですが、少し長いように感じました。もう少し短くすることはできますか? またこのコードに対して何かご意見がありましたらお願いします。 #inc

  • 解決済

    ビット構成を表示するプログラム

    すいませんputcharx>>iではなく1になっていたのが原因でした。 putchar(((x>>i)&1U)?'1':'0');の部分がよく理解できません。 例えば55という数字

  • 受付中

    putchar関数の意義について

    putchar関数の存在意義がよくわかりません ネットで調べると「画面に1文字出力する関数」と書いてあったのですが、 それだとputsやprintfでも代用可能だと思いました

  • 受付中

    putcharの必要性について

    C言語を勉強しているのですが 【putchar】というのがあるとおもうのですが 一文字しか出力できないんですよね? な、なんの意味があるのでしょうか.... puts(""

同じタグがついた質問を見る

  • C

    3563questions

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