0

stdin可変数のchar配列をスキャンしたいと思います。このようなもの:

char words1[num][100];    //num passed as command line argument
i = 0;
for (i = 0; i < num; ++i)
{
    While (fscanf(stdin, "%s %s %s ...", words[i], words[i + 1], word[i + 2] ...) != EOF)
    {
         fprintf(outFileStream, "%s", words[i];
    }
}

目標は、複数のプロセスがファイルの並べ替えに取り組むために、いくつかのファイルストリームに分割stdinすることです。多分役立つnumと思いましたが、送信するフォーマット指定子の数を知る必要があります。forループと一緒に使用vfscanfできると思いますか?誰かが例をあげることができますか?strcat(format, " %s")vfscanfva_list

4

1 に答える 1

1

あなたの質問を正しく理解していれば、複雑な形式は必要ないと思いますが、fscanf一度に1つの文字列を読み取ることができます。つまり、次のようなものを使用できます。

#include <stdio.h>

int main (int argc, char** argv) {
    int num = atoi(argv[1]);
    char words[num][100];
    int i = 0;
    while (fscanf(stdin,"%s",words[i]) > 0) { 
       fprintf(stdout,"Stream %d: %s\n",i,words[i]);
       i = (i + 1 ) % num;
    }
}

次のように入力ファイルtexta.txtを指定します。

a
b
c
d
e
f
g
h
i
j
k
l
m
n

...次に、上記のプログラムは次のようになります。

$ ./nstream 4 <texta.txt
Stream 0: a
Stream 1: b
Stream 2: c
Stream 3: d
Stream 0: e
Stream 1: f
Stream 2: g
Stream 3: h
Stream 0: i
Stream 1: j
Stream 2: k
Stream 3: l
Stream 0: m
Stream 1: n
于 2013-02-17T21:22:41.153 に答える