Login
Immutable PageDiscussionInfoAttachments
alstamber/Clanguage/scanf

MMA

そろそろ出力ばかりにも飽きてきた

さっきから出力しかしないプログラムばかりで面白く無いと思っている人もいるかも知れません。
出力しかしないプログラムは基本的に同じ出力しかしないので、いつまで経っても複雑な処理をプログラムにさせることはできないでしょう。
そこで今回は入力をできるプログラムを作って見ることにします。
キーボードから数値を入力することで自在に出力が変化するプログラム、なんだかだいぶ本格的になって来ましたね。
それでははじめましょう。

まずはソースコード

   1 #include <stdio.h>
   2 
   3 int main(void){
   4     int a = 0;
   5 
   6     printf("数字を入力してください");
   7     scanf("%d", &a);
   8 
   9     printf("%d\n", a);
  10 
  11     return 0;
  12 }

実行してみましょう。aという名前のプログラムだとします。

% ./a
数字を入力してください 2
2

このように数字を入力してくださいと表示され、指示通りに数字を入力しEnterキーを押すとその数字をオウム返しするプログラムが作れました。
いろいろな数字を入力して挙動を確かめてみてください。

scanfの使い方

今回のプログラムの肝となっているのが、7行目に使われているscanfというやつです。これが入力を担当しているわけです。
scanfは(ふつう)キーボードから入力を受け付けてその値を変数に格納するという役割をします。

形を見るとprintfによく似ています。整数値の入力を受け付けるので最初に"%d"と書いておきます。
そしてうしろに格納先の変数名を書きます。ここでポイントなのが変数の前に&が付いているということです!!!!!!!!!!
!を大量につけたのはちゃんと意味があって、これがprintfとの大きな違いかつ&がついていないとscanfはエラーを出して動かないのです。
なぜprintfではいらないのに、scanfでは必要なのかわけがわからないと思いますが、今は「scanfでは&を付けないといけないのだ」と丸暗記するしかありません。
(ここのちゃんとした説明はポインタの項目で行います。最初からポインタを説明すると余計な混乱を招くだけなので後回しにします。)

8行目のprintfは前回と同じです。意味が分からない人は前回の記事を読みなおしてくださいな。

printfのもう少し進んだ使い方

printfのもう少し進んだ使い方を覚えてみましょう。

   1 int a, b;
   2 
   3 a = 1;
   4 b = 3;
   5 
   6 printf("aは%dで、bは%dです\n", a, b);

今までのprintfの書き方と違うのは、普通の文字と%dをまぜこぜに書いているということ、それから%dが2つ並んでるということです。
じつはこんな書き方も普通にできてしまうんですね。実行してみると、

aは1で、bは2です。

と表示されます。1つめの%dにはa, 2つめの%dにはbと、後ろに変数名を書いた順番に埋め込まれていることがわかると思います。

   1 int shojikin = 0;
   2 int chokin = 0;
   3 
   4 printf("alstamberの所持金は%d円で、貯金は%d円です\n, shojikin, chokin);

こんなくだらないプログラムもかけますね。

演習問題

問一 キーボードから2つの整数の入力を受け付けて、その和と差を表示するプログラムを作りなさい。

1つめの整数は? 103
2つめの整数は? 98
103と98の和は201で、差は5です。

1つめの整数は? 22
2つめの整数は? 15
103と98の和は37で、差は7です。

alstamber/Clanguage/scanf (last edited 2011-10-09 04:24:07 by alstamber)