fgets
などで得られるものは文字列である。これを
数値に変換したい場合は数値変換関数を利用する。
atoi
- 整数へ
引数として文字列を受け取り、その文字列が示す整数に変換する。
結果はint型になるので、必ずint型変数で受け取ることに
注意する。
例:
:
int n;
char line[100];
printf("好きな数値は?");
fgets(line, sizeof line, stdin);
n = atoi(line);
printf("%dを2倍すると%dですよね!\n", n, n*2);
:
ただし、atoi
を利用する場合にはプログラムの先頭に
#include <stdlib.h>
を追加する必要がある(重要! 忘れて良くハマる)。
atol
- 整数へ(long型)
atoi
と同じだが、結果をlong型の整数にして返す。
irsvの環境では int型も long型も32ビット なので、全く同じ
結果になるが、Windows(MS-DOS)で使えるC言語処理系の中には
int型が16ビット(-32768〜32767)で、long型が32ビットのものがある。
多くの場合16ビットでは扱える数が小さすぎるので、明示的にlongとする
ことがある。そのようなときは、整数変換関数もatol
を使
うようにする。これも、#include <stdlib.h>
が
必要。
atof
- 浮動小数点数へ(double型)
引数として文字列を受け取り、その文字列が示す浮動小数点数に変換する。
結果はdouble型になるので、必ずdouble型変数で受け取ることに
注意する。
例:
:
double p;
char line[400];
printf("知ってるだけ円周率を入れてみそ: ");
fgets(line, sizeof line, stdin);
p = atof(line);
printf("へー、円周率は %.15lf なんスカ!\n", p);
:
数値を画面に出すために文字列化する場合は printf
を
使えば良い。
printf
(print with format)
最初の引数の文字列の中にある %X を、2個目以降の引数であたえた 値に置き換えて表示する。
printf("○×〜%X1〜△〜%X2
", X1, X2);
のようにすると、最初の%X1
が
X1の値に置き換えられ、
次の%X2
が
X2の値に置き換えらる。
%X1
の部分に使えるものには以下のものがある。
%d
- (Decimal; 10進数)
対応する値(int型)を10進整数の文字列に置き換える
%ld
- (Long Decimal; 10進数)
対応する値(long型)を10進整数の文字列に置き換える
%c
- (Character; 文字)
対応する値(char型)をその文字コードの文字1文字に置き換える
%x
- (heXa decimal; 16進数)
対応する値を16進整数の文字列に置き換える
%f
- (Floating point number)
対応する値(float型)を10進浮動小数点数の文字列に置き換える
%s
- (String)
対応するchar配列を文字列に置き換える
%
とd, x, f, s
の間には置き換えたあと
の桁数を指定する数を入れることができる。たとえば、
printf("合計%5d円です。\n", price);
とすると、price
の値が5桁に満たなくても5桁文確保し
て表示する。たとえば、price
が50だとしても、
合計 50円です。 ^^^^^
と表示される。小数(浮動小数点数)を表示する%f
では、
全体の桁数と、小数点以下の桁数を指定できる。
printf("答は%5.2fです。\n", answer);
とすると、「全体で5桁、そのうち小数点以下2桁」で表示する。
たとえば、answser=2.5
なら、
答は 2.50です。 ^^^^^
と表示される。
桁数の指定に負の数値を与えると、「左詰め」して表示される。 たとえば、正の値で桁数指定すると
printf("%10s, %20s\n", "公益太郎", "コウエキタロウ");
とすると、
公益太郎, コウエキタロウ ^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^
と右詰めで表示されるが、桁数に負の数を与えると
printf("%-10s, %-20s\n", "公益太郎", "コウエキタロウ");
とすると、
公益太郎 , コウエキタロウ ^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^
と左詰めで置き換えられる。