2012-02-08 12 views
1

単純なファイル入力にfscanfを使用するのは慣れています。でも、私はストリームに移動しようとしていると私はこれを行うことができるようにしたいと思います:あなたはそれを固執する、ファイルを読みするのは比較的簡単だ見ることができるようストリームのfscanfタイプの機能?

fscanf(file, %d %s, int1, str1); 

まずあなたが一つに出くわすint型最初の文字列をchar *に変換します。私が望むのは、ストリーム関数を使ってfstreamでこれを行うことです。これは、限られたストリームの知識で私が思いついたものです。

while((fGet = File.get() != EOF)) 
{ 
    int x; 
    int y; 
    bool oscillate = false; 
    switch(oscillate) 
    { 
    case false: 
     { 
      x = fGet; 
      oscillate = true; 
      break; 
     } 
    case true: 
     { 
      y = fGet; 
      oscillate = false; 
      break; 
     } 
    } 
} 

基本的にファイルをスキャンして、最初のintをxに、2番目の値をyに入れたいとします。

これはいくつかの理由で、あなたが分かるようにかなり悪いですが、実際にはこれを使用することはありませんが、それは私が考えることができるすべてです。これについてもっと良い方法がありますか?

+0

なぜあなたの初期の記述にはintとchar *がありますが、あなたの擬似コードには2つの 'int'sがありますか? @マットのため、 –

+0

です。それは本当に笑です。私はちょうど違う気がした。 – Jcrack

+0

@MooingDuck:私は一般的に解決策に同意しますが、 'str1'が' char * '宣言されていれば間違いなく 'if(in >> int1 >> std :: setw(size )>> str1){...} '。もちろん、 'fscanf()'の使用にも同様の問題がありますが、 'char *'への入力はサイズが制約されていない限り、 'gets()'と基本的に同じです。 –

答えて

5

は、あなたがしなければならないすべては

int x, y; 
File >> x >> y; 

そして

fscanf(file, "%d %s", &int1, str1); 

のと同等である、ストリームから2つの整数を読ん

int x; 
string s; 

file >> x >> s; 

され、確認するためにそのあなたの場合読み取りが機能しているかどうかを確認したい場合は、読み取りを条件に入れます:

if (file >> x >> s) 

または

while (file >> x >> y) 

または何でも。

+0

本当ですか?それは簡単ですか?まあ、それは私が思ったより簡単です。ありがとう – Jcrack

+0

@ Jcrack:ストリームでデフォルトの方法で読み書きするのはprintfより簡単です。書式を設定したい場合は、もっと冗長ではありますが、理解しやすくなります。 C++はC言語よりもプログラミングが簡単でエラーの発生が少ないです。 –

+0

私は... >>演算子が自動的にキャストを入力するのですか?チャットやストリームにたくさんの数字を読み込む必要がある場合はどうすればいいですか?これはどのように成し遂げられますか? – Jcrack

関連する問題