第3回

変換文字

00/06/22サンプルプログラム一部変更
98/11/06 IE4.xに対応させた
98/04/29メールアドレス訂正

今回は、変換文字についてです。まずは、以下のプログラムをコンパイルして実行してみて下さい。

#include<stdio.h>                                                                  
main(){                                                                             
    printf("%s\n","Hello work!");
} 
実行結果

Hello work!

第1回のプログラムの時と同じ結果に、ちょっぴり拍子抜けした方がいるかもしれません。ただし、今回のプログラムの実行結果には、Hello work!の後に実は改行コードがあるので、全く同じという訳ではありません。全く同じにしたいのであれば、第1回のプログラムの3行目printfのところを、

printf("Hello work!\n");

に変える必要があります。\nは制御文字で、改行したい時に使うということは前回学びました。ま、まさか、忘れていないでしょうね!?忘れてしまった方はこちら

さて、今回のプログラムの3行目に注目してみましょう。

printf("%s\n","Hello work!");

前回までは、printf("文字列");というスタイルだったのに対して、今回はprintf("文字列その1","文字列その2");になっています。
さらに、文字列その1の中の文字列に注目してみましょう。

%s\n

\nの方はいいとして(え、わからない?ならばこっち)今回、問題なのは%sの方。つまりこいつが、今回のテーマともいうべき変換文字という訳です。で、詳細についてはK&R2第7章7.2を参照して下さい。

つづく。



というのもあんまりなので、一応、説明してみます。あ、でもK&R2第7章の7.2は開いてね。
K&R2では、%sの引数の型は char *で、'\0'あるいは精度として与えられた数の文字まで文字列より文字を印字する、と解説しています。引数の型char *については、後々ポインタを学ぶ時に地獄をみる事にするとして、今回は、印字、というか出力のされ方のところだけを、とりあえず学ぶことにしましょう。あ、ここにも'\0'なんてものがッ!!この制御文字はヌルを・・・・、これも後々学ぶことにしましょう(それにしてもK&Rって、初心者に厳しいなぁ)。
要するに、変換文字%sには、文字列が入るということです。今回はそれでいいです。で、その文字列をどこからもってくるのかというと、2つ目の文字列、今回のプログラムのprintfの部分

printf("%s\n","Hello work!");

でいうと、Hello work!、という訳なんです。
復習してみますと、

printf("説明%s\n","へたくそッ!");

の場合、%sにはへたくそッ!がくるので、これは

printf("説明へたくそッ!\n");

と実行結果が同じになります。

文字列型の変換文字%sはこれくらいにして、次は整数(10進数)の変換文字%dについて学習するとしましょう。
長々と説明するより、一気にプログラムを見せた方が、かえってわかり易いと思いますので・・・

#include<stdio.h>                                                                  
main(){  
    printf("%d%d\n",15,20);
}        
お馴染みの3行目printfのところを見ると、さっきのプログラムで文字列その2だった部分が、数字(15)になっています。しかも、""で囲まれていません。さらにもう1つ(20が)増えています。:-)

結論からいうと、""で囲むのは文字列だけで、数字は囲みません。仮に数字を""で囲んだ場合、それは文字列として扱われます。また単一の文字(文字列じゃないヨ)の時は、''で囲みます。

例えば、単一の文字Kを単一文字の変換文字%cを使って出力する場合は、

printf("%c\n",'K');

となります。
あと、さっき1つ(20が)増えた件ですが、これは()の中の1つ目の文字列の中に、変換文字%dが1つ追加されたからです。

さらにもう1つ、以下のように変換文字%sを加えれば、今度はさっきの20の後に、さらに文字列が増えることになります。

#include<stdio.h>                                                                  
main(){  
    printf("%dと%dは%sです。\n",15,20,"整数");
}        
最後に、数値15を変換文字%oで8進数、%xで16進数で出力するプログラムです。()の中の3つ目の引数を、数字(15)ではなくて、数式(10+5)にしてみました。

#include<stdio.h>                                                                  
main(){  
    printf(" 8進数:%o\n16進数:%x\n",15,10+5);
}
実行結果

 8進数:17
16進数:f

つづく。


[メニュー][第2回][第4回]

いーざ
email:CQP00202@nifty.ne.jp