72164


switch文を用いたプログラムに関して質問です。  
まず、期待していない地域を出力した場合には、その時点で「そのような地域はありません。」という  
文を出力させたいのですが、それができません。

とりあえず、条件と自分が作成したプログラムを示します。  
条件  
1:東京 2:愛知  
場所 地域 場所 地域  
1 東京タワー 1 名古屋駅  
2 国会議事堂 2 豊橋駅

[code]

    #include<stdio.h>
    
    int main(void)
    {
       int number,code;
       printf("県を入力してください(1:東京,2:名古屋) ");
       scanf("%d",&number);
        if(number<0 && 3<number){
         printf("その県はありません.\n");
       }
       printf("場所を入力してください: ");
       scanf("%d",&code);
       
       if(number==1){
        switch(code){
          case 1:  puts("東京タワー"); break;
          case 2: puts("国会議事堂"); break;
       
         default:
          printf("対応する場所はありません.\n");
         }
       }
    
       else if(number==2){
        switch(code){
          case 1: puts("名古屋駅"); break;
          case 2: puts("豊橋駅"); break;
         default:
          printf("対応する場所はありません.\n");
         }
       }
       return 0;
    }
    
[/code]

実行結果①

[code]

    $ ./a.out
    県を入力してください(1:東京,2:名古屋) 1
    場所を入力してください: 1
    東京タワー
    
[/code]

実行結果②

[code]

    $ ./a.out
    県を入力してください(1:東京,2:名古屋)  1
    場所を入力してください: 3
    対応する場所はありません.
    
[/code]

実行結果③

[code]

    $ ./a.out
    県を入力してください(1:東京,2:名古屋) 3
    場所を入力してください: 2
    
[/code]

実行結果①、②は条件を満たしているのですが、実行結果③は期待しているコンパイル結果は

[code]

    $ ./a.out
    県を入力してください(1:東京,2:名古屋) 3
    その県はありません
    
[/code]

なのですが、自分のプログラムは変だとは思うものの、どこをどのように修正していいのかがわかりません。  
どうすればいいのですか。お願いします。


CC BY-SA 4.0
2020-11-23T09:42:20.243
72163
2020-11-23T11:26:27.103
2020-11-23T11:26:27.103
41837
41837
question
c
惜しい感じではあるが、思ったとおりの結果が出力されない


まず、大体のプログラミング言語で同じ意味を表すものと思いますが  
「&&」という記号は日本語で言うと「共通部分」いわゆる「かつ」を表します。  
「AかつB」つまり、AでありBでもある状態です。

これを念頭に置き、県の数値を入力後の判定部分を見てください。

[code]

    if(number<0 && 3<number)
    
[/code]

となっていますね。  
これは「0より小さい、かつ3より大きい」ということになります。  
さて、この条件に当てはまる数値とは何でしょうか。

おそらく、質問者様は  
「0以下 または 3以上の場合」としたいか、  
「1より小さい または 2より大きい場合」としたいのではないでしょうか？  
上記2つは同義ですね。  
しかしプログラムでも上記の様に2通りの書き方で実現出来ます。  
「0以下 または 3以上の場合」

[code]

    number<=0 || 3<=number
    
[/code]

「1より小さい または 2より大きい場合」

[code]

    number<1 || 2<number
    
[/code]

どちらでも同じ動きをしますのでどちらでも構いません。  
ご自身の式と見比べて頂くとわかると思いますが、  
まず、「&&」が「||」に変わっていますね。  
そして後者の場合は数値が変わっています。  
日本語と比較しながらゆっくり考えて頂くとわかって頂けると思います。

この辺りは基本的なところで今後も何度も使用することになるでしょう。  
何か参考書、Webサイトを見ながら進めているのでしたら  
もう一度if分などの部分を見直されては如何でしょうか。

あと、想定されている実行結果の通りにするのであれば  
「その県はありません」と表示した後にreturnするなどして  
プログラムを終了させるべきかと思います。  
他にも方法はありますが、何かしらしないと余計なものまで出力されるはずです。

そして、こちらは余談ですが  
県の選択肢にひとつも県が存在しないのは気になりました。

以上です。


CC BY-SA 4.0
2020-11-23T11:20:37.763
72164
2020-11-23T11:20:37.763
38100
72163
answer