-1

いくつかの状態遷移を持つパーサーを設計しました。ここで、ファイルを C で作成したパーサーにリダイレクトして、トークンを提供したいと考えています。

私の設計では、文字列の末尾にスペース (' ') が必要です。つまり、ファイルまたは stdin から読み取った文字列にスペース文字を追加する必要があります。しかし、問題はインデックスです。私がする必要があるファイルからリダイレクトするために

int length=0;

while((c1=getchar())!=EOF)
{
a[length]=c1;
length ++;
}
a[length-1]=' ';
a[length]=EOF;

標準入力から読み取る間、私はする必要があります

int length=0;
while((c1=getchar())!=EOF)
{
a[length]=c1;
length ++;
}
a[length]=' ';
a[length+1]=EOF;

入力は、stdin 入力またはファイル リダイレクトの両方から取得できます (例: ./a.out < ac) 入力のタイプに基づいて、これらをコードに組み込むにはどうすればよいですか?

4

1 に答える 1

3

まず、両方ともまったく同じ効果cat data | ./a.out./a.out < data生み出します。つまり、プログラムstdinがファイルを読み取るということです。

おそらく、あなたが望むのは のような構文です./a.out data。このために、次のようなループをお勧めします。

void process_my_data(FILE *);  // main logic here!

int main(int argc, char * argv[])
{
    if (argc == 1)
    {
        process_my_data(stdin);
    }
    else
    {
        while (--argc)
        {
            FILE * f = fopen(argv[argc], "rb");
            process_my_data(f);
            fclose(f);
        }
    }
}
于 2012-08-23T08:13:26.723 に答える