プログラミング学習の記録 #002(C)
なんやかんやNF準備が忙しくて学習を進めることができず、日が空いてしまった。お蔭でNF準備は、割と順調に進み、10月中に提出すべきものは、すべて提出できたはずである。ちなみに、明日も説明会があるので出席して色々と聞き、準備を進めていかねばならない。しかし、この調子では卒業研究も全然進まず、若干、困っているところである。
1. 前回の復習
前回は、printfを用いて文字列を出力した。コメントや友人からの助言などで知ったことを加えて、新たにコードを書いてみた。前回、コードを実行したところ、Terminalで「warning」と表示された。
% cc 1026-2.c
1026-2.c:3:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
main()
^
1 warning generated.
% ./a.out
Koike Minami.
どうやら、関数の戻り値の型を設定していないことが原因ということらしく、教えてもらった通り、「main()」を「int main()」と変更すると、表示されなくなった。また、printfを複数回並べたら、複数行の表示ができたが、これは、
#include <stdio.h>
int main()
{
printf("What is ESG?\n");
printf("E: Environment\n");
printf("S: Social\n");
printf("G: Governance\n");
return 0;
}
でも、
#include <stdio.h>
int main()
{
printf("What is ESG?\n");
printf("E: Environment\nS: Social\nG: Governance\n");
return 0;
}
でも、同じように出力されるということを教えてもらった。つまり、「\n」が改行を表すので、printfを複数回並べても、1つのprintfの中で「\n」を用いて文字列を並べてもよいということらしい。まあ、printfを複数回並べた方が見やすいので、並べて書くことの方が多いようには思う。以上のコードを実行すると、いずれも
% cc 1101-1.c
% ./a.out
What is ESG?
E: Environment
S: Social
G: Governance
のように出力されたので成功である。
2. UNIXコマンド(ファイルとディレクトリの操作)
この章では、ファイルとディレクトリの操作を行うためのUNIXコマンドについて説明されている。なぜか、Windowsを削除してUbuntuを入れたPCをもっていて、たまに使っていたので、この章で説明されていたUNIXコマンドは、おおむね知っていた。いつまで経っても「cd ..」だけは覚えられないが、それ以外では、あまり困ったこともないので、さらっと読んで終わった。
3. コマンドのカスタマイズ
MacのPCを使用しているため、教科書に記載されている方法そのままでは、うまくコマンドをカスタマイズすることができなかった。代わりに、このサイトを見たところ、うまくできた。rmコマンドを実行するときに、確認を要求するように変更した。つまり、「rm」と入力したときに「rm -i」が実行されるようにした。これを実行してみると、
% ls
1026-1.c 1026-2.c 1026-3.c 1101-1.c 1101-2.c a.out
% rm a.out
remove a.out? n
% ls
1026-1.c 1026-2.c 1026-3.c 1101-1.c 1101-2.c a.out
% rm a.out
remove a.out? y
% ls
1026-1.c 1026-2.c 1026-3.c 1101-1.c 1101-2.c
というようなことになった。rmコマンドを入力すると、「remove a.out?」と表示され、1つ目では「n」を入力したので、rmが実行されなかったが、2つ目では「y」を入力したので、rmが実行されたことがわかる。
4. emacs
viを使用するので読み飛ばした。ちなみに、最近ではVScodeを使用することが多い。結局、どれを使うべきか。
5. その他
章末の練習問題として、以下のコードを実行するというものがあった。
#include <stdio.h>
int main()
{
printf("New Line \n");
printf("Line Feed\fThis line is feeded.\n");
printf("Tab\tTab\tTab\n");
printf("1\t10000\t100000\n");
printf("Backspace: 123456\b\b\b789\n");
printf("Return! A part of this line is deleted!\r");
printf("vertical tab\vvertical tab\vvertical tab\n");
printf("Special characters: \\ \' \? \"\n");
printf("Null: \0 Is this sentence printed?");
printf("\n");
return 0;
}
実行結果は、
% ./a.out
New Line
Line Feed
This line is feeded.
Tab Tab Tab
1 10000 100000
Backspace: 123789
vertical tabrt of this line is deleted!
vertical tab
vertical tab
Special characters: \ ' ? "
Null:
となった。一応、次の章の内容なので、まだ意味はわからないが、このような結果が求められているのか。
-----
動け!タイムライン