コマンドライン入力またはファイルの開始へのポインターをリセットするにはどうすればよいですか。たとえば、私の関数はファイルから行を読み取り、getchar()を使用して出力します
while((c=getchar())!=EOF)
{
key[i++]=c;
if(c == '\n' )
{
key[i-1] = '\0'
printf("%s",key);
}
}
これを実行した後、ポインタはEOF imと仮定しますか?ファイルの先頭を再度指すようにするにはどうすればよいですか?
(./function <inputs.txt)として入力する
stdin
以外のFILE*
がある場合は、次を使用できます。
rewind(fptr);
または
fseek(fptr, 0, SEEK_SET);
ポインタをファイルの先頭にリセットします。
stdin
に対してはできません。
ポインターをリセットできるようにする必要がある場合は、ファイルをプログラムに引数として渡し、fopen
を使用してファイルを開き、その内容を読み取ります。
int main(int argc, char** argv)
{
int c;
FILE* fptr;
if ( argc < 2 )
{
fprintf(stderr, "Usage: program filename\n");
return EXIT_FAILURE;
}
fptr = fopen(argv[1], "r");
if ( fptr == NULL )
{
fprintf(stderr, "Unable to open file %s\n", argv[1]);
return EXIT_FAILURE;
}
while((c=fgetc(fptr))!=EOF)
{
// Process the input
// ....
}
// Move the file pointer to the start.
fseek(fptr, 0, SEEK_SET);
// Read the contents of the file again.
// ...
fclose(fptr);
return EXIT_SUCCESS;
}
パイプ/リダイレクトされた入力はそのようには機能しません。オプションは次のとおりです。