再びですが教えてください!
Posted: 2007年10月09日(火) 21:46
プログラミングについては初心者です;
先日質問した課題の答えを教えてもらったのですが、
その内容が理解できません。ぜひ教えてください
(問題)
あるファイルの内容を書き換えるプログラムを作成します.
前問で作成したファイル "sample.txt" を読み取り,その各行に行番号を付けて再び "sample.txt" に出力するプログラム bango.c を作成しなさい.例えば "sample.txt" の中身が
Hello world.
Good morning.
であれば,bango.c をコンパイル/実行した結果,同じファイル "sample.txt" は
1: Hello world.
2: Good morning.
3:
に書き換えられるものとします(3行目は改行コードのみ).
(答え)
#include <stdio.h>
#define GMAX 50 /* 最大行数 */
#define MMAX 80 /* 1行中最大文字数 */
int main(void)
{
FILE *fp; char s[GMAX][MMAX]; int m, i = 0;
fp = fopen("sample.txt", "r");
while(fgets(s[i++], MMAX-1, fp) != NULL && i < GMAX);
/* 1行の最後は 0 なので,MMAX-1 とする */
m = i - 1; /* ← 全行数 */
fclose(fp); /* ← 必要 */
fp = fopen("sample.txt", "w");
for(i = 0; i < m; i++) fprintf(fp, "%2d: %s", i, s);
fclose(fp); /* ← なくてもよい */
}
char s[GMAX][MMAX]の意味がよくわかりません。
それと、while文の使い方がよくわからないです。これはm = i - 1;というのを繰り返しているんですか?
fgets(s[i++], MMAX-1, fp) != NULL というところの、i++ってあるのですが、iの値はどんどん増えてゆくんですか?
本当にわかんないことだらけで、どなたか教えてください;;
先日質問した課題の答えを教えてもらったのですが、
その内容が理解できません。ぜひ教えてください
(問題)
あるファイルの内容を書き換えるプログラムを作成します.
前問で作成したファイル "sample.txt" を読み取り,その各行に行番号を付けて再び "sample.txt" に出力するプログラム bango.c を作成しなさい.例えば "sample.txt" の中身が
Hello world.
Good morning.
であれば,bango.c をコンパイル/実行した結果,同じファイル "sample.txt" は
1: Hello world.
2: Good morning.
3:
に書き換えられるものとします(3行目は改行コードのみ).
(答え)
#include <stdio.h>
#define GMAX 50 /* 最大行数 */
#define MMAX 80 /* 1行中最大文字数 */
int main(void)
{
FILE *fp; char s[GMAX][MMAX]; int m, i = 0;
fp = fopen("sample.txt", "r");
while(fgets(s[i++], MMAX-1, fp) != NULL && i < GMAX);
/* 1行の最後は 0 なので,MMAX-1 とする */
m = i - 1; /* ← 全行数 */
fclose(fp); /* ← 必要 */
fp = fopen("sample.txt", "w");
for(i = 0; i < m; i++) fprintf(fp, "%2d: %s", i, s);
fclose(fp); /* ← なくてもよい */
}
char s[GMAX][MMAX]の意味がよくわかりません。
それと、while文の使い方がよくわからないです。これはm = i - 1;というのを繰り返しているんですか?
fgets(s[i++], MMAX-1, fp) != NULL というところの、i++ってあるのですが、iの値はどんどん増えてゆくんですか?
本当にわかんないことだらけで、どなたか教えてください;;