4 書式付き入力scanf(p.326)

4.1 キーボードからのデータの取り込み

キーボード入力の場合,書式付入力のscanf()という関数を使う方法が最も簡単である.こ の関数の引数は,ポインター3で,キー ボードからのデータを入れる変数のアドレスを指定する.ポインターだのアド レスだのと面倒なことが多いが,そんなことが分からなくても,キーボードからデータの 入力は可能なので安心してよい.

標準入力(キーボード)からデータを読み込んで,それを変数hogeに代入する場合,

scanf("%lf",&hoge);
 

と書けばよい.これは, というようなことを表している.図2のような感じである.
図 2: キーボードからデータを変数に取り込むscanf関数の意味
\includegraphics[keepaspectratio,scale=1.0]{figure/scanf.eps}

キーボードからのデータの入力でも型を指定する必要がある.このようにコンピューター プログラムでは型というものが重要となる.これは,データをメモリーに格納する方法をプログラ マーが指定する必要があるからである.これまで,使ってきた型指定の方法を表 2にまとめる.ただし,倍精度実数で,非常に大きな数値や小さい 数値の場合指数表示(%e)を使う.

表を見て分かると降り,文字列は少し複雑である.幸いなことに,本講義では文字列を使 うことはほとんどないので,この部分は余り気にしなくてよい.

表 2: 型に依存する変数定義や入出力
  整数  倍精度実数 文字 文字列
変数 int hoge double hoge char hoge char hoge[256]
入力 scanf("%d",&hoge) scanf("%lf",&hoge) scanf("%c",&hoge) scanf("%s",hoge)
出力 printf("%d",hoge) printf("%f",hoge) printf("%c",hoge) printf("%s",hoge)
    printf("%e",hoge)    

4.2 改行文字の問題

データを入力する場合,データを入れた後に完了を示す[Enter]キーを押す.この [Enter]キーを示す文字'\n'も読み込まれようとして,悪さ をすることがある.この,改行コード'\n'を読み捨てる必要がある. それを行うために,教科書(p.335)には3通りの方法(p.337)を示している.

どれも一長一短がある.諸君が作成するプログラムは,諸君自身でしか使わないので,入 力の処理にこだわらない方がよい.へんなデータを入れて,プログラムがクラッシュして も損害は無いからである.そこで,本講義では最も簡単な,最初の方法をとることにする. すなわち,キーボードから実数を読み込んで,変数hogeに代入する場合,

scanf("%lf%*c",&hoge);
 

と書く.

4.3 プログラム例

リスト2にいろいろな型のデータを読み込んで,表示するプログラム を示す.このプログラムが理解できれば,コンソール入出力の基本はOKである.
   1 #include <stdio.h>
   2 
   3 int main(void){
   4   int i;
   5   double d;
   6   char c;
   7   char s[256];
   8 
   9   scanf("%d%*c",&i);
  10   scanf("%lf%*c",&d);
  11   scanf("%c%*c",&c);
  12   scanf("%s%*c",s);
  13 
  14   printf("\n\n");
  15 
  16   printf("%d\n",i);
  17   printf("%f\n",d);
  18   printf("%c\n",c);
  19   printf("%s\n",s);
  20   
  21   return 0;
  22 
  23 }

4.4 練習問題

[練習1]
キーボードから角度[deg]を読み込んで,三角関数 ( $ \sin,\,\cos,\,\tan$)の値を表示するプログラムを作成せ よ.出力する三角関数の値は,1行に表示しタブ区切りとすること.

ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成18年6月6日


no counter