#include <stdio.h>
#define IN 1
#define OUT 0
int main()
{
while (1)
{
FILE *fptr1;
char filename[100];
printf("Enter the filename to open for reading \n");
scanf("%s", filename);
fptr1 = fopen(filename, "r");
int c, nl, nw, nc, state; // These variables aren't being reset.
while ((c = fgetc(fptr1)) != EOF)
{
++nc;
if (c == '\n') ++nl;
if (c == '\t' || c == '\n' || c == ' ') state = OUT;
else if (state == OUT)
{
state = IN;
++nw;
}
};
printf("Lines: %d Words: %d Characters: %d\n", nl, nw, nc);
}
return 0;
}
これは、ファイルを解析し、それが持つ線、単語、および文字の数を出力する簡単なプログラムです。新しい行、単語、文字が検出されると、nl、nw、ncがインクリメントされます。出力:6つのワード:15の文字:81whileループの各反復で変数が破棄されませんか?
を読み取るために開くためにファイル名を入力は
線が
data.txtをを読み取るために開くためにファイル名を入力してください
data.txt
行:12ワード:30文字:162
たときにwhileループが終了すると、それが正しく初めて動作しますが、それは、NWをNL破壊しない
を読み取るため開くためにNCを、ファイル名を入力し、ちょうどそれらに追加し続けます。どうして?
あなたの 'fclose()'はどこですか? – iBug
あなたは「リセット」すべきだと思いますか?ローカル変数はそれ自体をリセットしません。それらをリセットするはずののはあなたです。そして、あなたはそれをやっていません。初期化されていない変数には、予測できない値が含まれています。これらの予測不可能な値は、以前の反復の値である可能性があります。または、他の何か。 – AnT
Heh。おそらく、彼はJavaからの変換であり、初期化がゼロになっているかもしれません。 – Gene