1

単純なCコンソールアプリケーションがあり、100,000の入力でテストしようとしています。しかし、プログラムは毎回約4,096文字しか受け取りません。これは入力の簡単な例です。

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1    //Up to 100,000

毎回手動で数字を書くとうまくいきますが、入力(100,000個のスペースで区切られた数字)をコンソールに貼り付けたいだけです。

PS:私の英語は申し訳ありませんが、あまり良くありません

編集:はい、私が使用しているプラ​​ットフォームはWindowscmdです。そして、私はすでに「プロパティ>オプション>バッファサイズ」を試しました。

コードの例:

int a[100000],i;
for(i=0;i<100000;i++)
    scanf("%i",&a[i]);

テストの印刷画面: ここに画像の説明を入力してください

4

2 に答える 2

1

100Kの整数を使用してファイルを作成し、それをアプリにパイプすることができます。例えば:

cat myInput.txt | myApp

またはWindowsの場合:

type myInput.txt | myApp
于 2012-06-07T21:20:41.303 に答える
1

標準IOルーチン(printf()およびなどscanf())は、バッファリングを使用してパフォーマンスを向上させ、いくつかの優れた標準化されたルーチン(fgets()一度に1行ずつ読み取るなど)を提供します。関数呼び出しは通常、システム呼び出しよりも大幅に高速です。システムコールを使用して一度に1バイトのデータを読み取るアプリケーションを作成する場合、一度に1024バイト以上を読み取るアプリケーションよりも実行速度が大幅に低下します。

これはほとんどの場合素晴らしいことです。

しかし、それはあなたがあなたのアプリケーションを注意深く書く必要があることを意味します。read()すべてのデータを一度に読み取る単一スタイルの関数を単純に発行することはできません。(使用可能なデータの量は、マシンで使用可能なメモリとスワップスペースの量よりも大幅に多い場合があるため、可能であっても、すべてのユースケースで信頼性が高いとは限りません。)

入力のストリームを処理するアプリケーションは、次のようなループを持つ傾向があります。

int c;
while ((c = getc()) != EOF) {
    /* handle the character c */
}

また

char buffer[1024];
while (fgets(buffer, sizeof buffer, F)) {
    /* handle buffer */
}

最初のケースは、2つ以上の「バッファー」にまたがる入力について心配する必要がないため便利です。ただし、最初のケースは意味がsscanf()あり、同様のツールでは数値の解析に役立ちません。2番目のケースでは、解析時に使用できますがsscanf()、入力が2つのバッファーにまたがる準備をする必要があります。バッファが8バイトしかない場合、これを見つけるのは簡単です。32バイトのMD5sum、または表現するのに8文字以上を必要とするbuffer[8]aを読み込みたい場合: 。最初の読み取りでは最初の8バイトが取得され、2番目の読み取りでは次の2バイトが取得されるため、数値を作成する必要があります。double1234567890

于 2012-06-07T21:46:22.213 に答える