私は今、「ふつうのlinuxプログラミング」という本でgccプログラミングの勉強しているのですが、fputsで出力するところでわからないことがあったので聴きにきました。
今私が作っているのは、ライブラリコールを使ったcatコマンドで、そこにもしタブ(\n)があったら "\n" として置き換えて、もし改行があったら "$ + 改行" として置き換える というのを作っているのですが、
while ((c = fgetc(f)) != EOF) {
switch (c) {
case '\t':
if (fputs("\t", stdout) == EOF) exit(1);
break;
case '\n':
if (fputs("$\n", stdout) == EOF) exit(1);
break;
default:
if (putchar(c) < 0) exit(1);
break;
}
このときに、なぜ"$\n"と書くのかがわかりません。これの実行結果はただ $ の記号しか行の後ろにつきません。上と同じように"\n"とかくと、行がずれておかしなことになってしまいます。
初歩的なことかもしれませんがよろしくおねがいします。
#include <stdio.h>
#include <stdlib.h>
static void do_cat(FILE *f);
int
main(int argc, char *argv[])
{
if (argc == 1) {
do_cat(stdin);
}
else {
int i;
for (i = 1; i < argc; i++) { FILE *f = fopen(argv[i], "r"); if (!f) { perror(argv[i]); exit(1); } do_cat(f); fclose(f); } } exit(0);
}
static void
do_cat(FILE *f)
{
int c;
while ((c = fgetc(f)) != EOF) { switch (c) { case '\t': if (fputs("\t", stdout) == EOF) exit(1); break; case '\n': if (fputs("$\n", stdout) == EOF) exit(1); break; default: if (putchar(c) < 0) exit(1); break; } }
}
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/28 11:01
2018/07/28 12:19 編集