44章 型変換関数

http://www.geocities.jp/ky_webid/c/044.html

char型からint型への変換とか色々そういう話。

sprintfが凄い便利ですね。printfでフォーマットを指定して出力していたのが、変数に格納される関数です。

問題1

キーボードから2つの整数を入力させ、その加算結果を表示するプログラムを作って下さい。ただし、入力にはfgets関数を使って下さい。

fgetsを使うということは今までみたいにscanfを使って整数の入力ができないので型変換を行う必要があるというわけですね。

やってみますドキドキ。

int main () {
    char str[81];
    int num1,num2;
    
    puts("一つ目の整数");
    fgets(str,sizeof(str),stdin);
    num1 = atoi(str);
    
    puts("二つ目の整数");
    fgets(str,sizeof(str),stdin);
    num2 = atoi(str);
    
    printf("%d + %d = %d\n",num1,num2,num1+num2);
    return 0;
}
$ main
一つ目の整数
10
二つ目の整数
33
10 + 33 = 43

できました。atoi素晴らしいですね。

答え合わせ

大正解です。

問題2

問題1のプログラムで、結果を表示するとき、次のように表示させるようにして下さい。

10 + 20 = 30

このとき、出力にputs関数を使って下さい。

やってみましょう。putsを使うということはフォーマット指定できないってことですね。ということはつまり・・・

int main () {
    char str[81];
    int num1,num2;
    
    puts("一つ目の整数");
    fgets(str,sizeof(str),stdin);
    num1 = atoi(str);
    
    puts("二つ目の整数");
    fgets(str,sizeof(str),stdin);
    num2 = atoi(str);
    
    sprintf(str,"%d + %d = %d",num1,num2,num1+num2);
    
    puts(str);
    return 0;
}

できました。つまりsprintfで文字列を作っておいてputsで表示させるということですね。

答え合わせ

正解ですね。楽チンです。

問題3

"123abcrst"が30進数で幾つか調べるプログラムを作って下さい。

これは指定の基数に変換できるstrtol関数が活躍しそうです。

int main () {
    printf("%ld",strtol("123abcrst",NULL,30));
    return 0;
}
$ main
2147483647

できました。とっても短いですね。

答え合わせ

実際に変換した後の数値が解答になかったのでこの数値で正解なのかちょっと不安ですが多分大丈夫でしょう。