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

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

ただいまの
回答率

90.84%

  • C

    3350questions

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

else ifの処理について

解決済

回答 3

投稿

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

aiueoaiueoaiue

score 52

わからない事

以下にソースの一部についてelseif文が実行されない理由がわかりません。最初のif文が実行された時のNの値をprintfで確認してみると17200でした。つまりif文を抜けた時点でN=17200ということです。しかし次のelseifの中でのNの値をprintfで確認したかったのですが、何も表示されず、そのまま終了してしまいました。Nは17200のはずなのでelseifの条件のN < 2940*6の条件は満たしているはずなのに、elseifの中が実行されませんでした。if文の中にif文を何個も記述すると上手くいきます。elseifだと実行されない原因がわかる方回答お願い致します。

ソースの一部

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "wave.h"
int N = 0;
int main(void)
{
  MONO_PCM pcm;

  double f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16;

  pcm.fs = 44100; /* 標本化周波数 */
  pcm.bits = 16; /* 量子化精度 */
  pcm.length = pcm.fs * 6; /* 音データの長さ */
  pcm.s = calloc(pcm.length, sizeof(double)); /* 音データ */
 void Time(MONO_PCM, double, double);


  f0 = 523.251; /* 周波数 */
  f1 = 554.365;
  f2 = 587.330;
  f3 = 622.251;
  f4 = 659.255;
  f5 = 698.456;
  f6 = 739.989;
  f7 = 783.991;
  f8 = 830.609;
  f9 = 880;
  f10 = 932.328;
  f11 = 987.767;
  f12 = 1046.502;
  f13 = 1108.731;
  f14 = 1174.659;
  f15 = 1244.508;
  f16 = 1318.510;
 if(N < 2866.5*6){
      Time(pcm, f4, 0.39);
    printf("%d\n",N );
 }
  else if(N < 2940*6){
    printf("%d\n",N );
     Time(pcm, 0, 0.40);
  }
  else if(N < 5733*6){
     Time(pcm, f4, 0.78);
  }
  else if(N < 8526*6){
     Time(pcm, f11, 1.16);
  }
  else if(N < 8599*6){
     Time(pcm, 0, 1.17);
  }
  else if(N < 11392*6){
     Time(pcm, f11, 1.55);
  }

(省略)


void Time(MONO_PCM pcm, double oto, double jikan2){
    double a = 1, x2;
    int n;
    x2 = 6 / jikan2;
    for (n = N; n < pcm.length/x2; n++,N++){
        pcm.s[n] = a * sin(2.0 * M_PI * oto * n / pcm.fs);
    }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 3

checkベストアンサー

+1

else ifは直前のifの条件が満たされなかったときに実行されます。
よって、if、else if、else if、...と繋げた場合、最初に条件が満たされたブロックしか実行されません。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

最初のif文で条件式が真となってそのナカミが実行されたら、else文のナカミは実行されません

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

if文とはそういうものです。
if~else if~elseの中で条件が満たされたところのみが実行されます。
なので全ての条件に対して処理したいのであれば、elseを外しましょう。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

  • 解決済

    警告やコンパイルエラーを直すことができません。

    クイックソートのソースを書いているのですがうまくコンパイルすることができません。 #include <stdio.h> #include <stdlib.h> #includ

  • 解決済

    結果の表示について

    課題で、 キーボードから入力された数値の平均を計算して表示し、平均以上の数値、平均より小さい数値を表示するプログラムを考えているのですが、 実行例 ./a.out

  • 解決済

    C言語のfor文if分について、解答をお願いします。

    前提・実現したいこと こんにちは、初めての質問です。 1************************ 2************************ 3**********

  • 解決済

    無限ループしてしまうようになった

    解決したいこと 一度はうまくいったのですが、作り直したらなぜか無限ループしてしまうようになってしまいましたのですが、わかる方いますか。コンパイルも通っているのですが。 追記 #

  • 解決済

    3つの文字列の長さを比較したい

    こんにちは C言語についての質問ですが キーボードから入力された3つの文字列の長さを比較して一番長い文字列をprintf()で表示させたいのですがこの場合strcmp関数で比較する

  • 受付中

    プログラムを見やすく改良したい

    正常に動くプルグラムを見やすく改良したい。 具体的に教えていただければありがたいです。セグメンテーションフォルトでベスト7まで表示して停止します。173行あたりだと思うのですが、よ

  • 解決済

    実行時間の表示がおかしい

    ラックナンバーリサーチの時間が過去の履歴は正常に表示されますが、 短い順に並べるところの年と月が2017年が3917年、10月が9月と表示され、そのほかの 時間は正常です。コードの

  • 解決済

    C言語 ファイルからの読み取り

    大学の授業の課題で以下のような問題が出たのですが分かりません。C言語です。 ファイルから読み取る関数と出力する関数を分けたいです。 null 文字を除いて最大20文字を格納でき

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

  • C

    3350questions

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