2016-03-22 11 views
3

私のコードに問題がありますが、コードは実行されますが、数字はすべてどこにでもあります。コードは動作しますが、すべての順序が間違っています

RainfallToDate.txt:

0.01 
1.74 
0.19 
0.65 
0.50 
0.10 
0.00 
0.02 
0.01 
0.06 
1.57 
7.76 

averageRainfall.txt:ここ

2.99 
3.32 
2.04 
1.06 
0.39 
0.09 
0.00 
0.00 
0.23 
0.78 
1.88 
2.12 

はコードです:私の問題はである私が知っている

#include <iostream> // for cout 
#include <fstream> // for file I/O 
#include <cstdlib> // for exit() 

using namespace std; 

int main() 
{ 
ifstream fin; 
ofstream fout; 
ifstream fin_rainFall("rainfallToDate.txt"); 
ifstream fin_average("averageRainfall.txt"); 

if (fin.fail()) 
{ 
    cout << "Input file failed to open.\n"; 
    exit(-1); 
} 
fout.open("rainfall.txt"); 
if (fout.fail()) 
{ 
    cout << "Output file failed to open.\n"; 
    exit(-1); 
} 

fout << "Rainfall for Cupertino: A Comparison\n" << endl; 
fout << "Month\tAverage\t 2015\tDeficit\n" << endl; 


for (int i = 1 ; i <= 12 ;i++) { // counts the month from 1-12 
    char num[256]; 
    char num2[256]; 

    fout<< i << "\t"; 

    fin_average.getline(num,256); 
    fout<<num << "\t"; 

    fin_rainFall.getline(num2,220); 
    fout<<num2<< "\t"; 

    double a; 
    double b; 

    while (fin_average >> a && fin_rainFall >> b){ 
     fout <<"\t" << (a-b) << endl; 

    } 
} 
fin.close(); 
fout.close(); 

return 0; 

} 

、それがです

double a; 
double b; 

    while (fin_average >> a && fin_rainFall >> b){ 
     fout <<"\t" << (a-b) << endl; 

    } 

一度このコード行を削除すると、コードは完全に実行されますが、この行が必要なので、降雨に平均値を引くことができます。ここに私が得ているものの写真があります。私が持っていることになっています何の pic1

ピクチャー - - 私が取得しています何の

ピクチャー私が過去時間のためにこれを修正する方法を把握しようとしているに取り組んできた pic2

をし、私はまだ何が間違っているのか把握していない。

詳細:私のコストは、2つの別々の「テキストファイル」からのデータを本質的にrainfall.txtと呼ばれる3番目のテキストファイルにマージして印刷することになっています。そこには、赤字。

+4

それはここにプレーンテキストとして出力を持つようにかなり役立つだろう。 – tadman

+3

固定サイズの 'char'バッファの代わりに' std :: string'を使わないのはなぜですか? C++はバグをオーバーフローさせることを強く奨励します。 – tadman

+1

"\ t"を削除するか、何が起きているのかを確認するためにステートメントでコードステートメントにステップインしてみましたか? –

答えて

1

ループは次のようになります。

for (int i = 1 ; i <= 12 ;i++) { // counts the month from 1-12 
    double a; 
    double b; 

    fin_average >> a; 
    fin_rainFall >> b; 

    fout << i << "\t" <<a <<"\t" << b << "\t" << (a-b) << endl; 
} 
+0

私は普通のcppプログラマーではありません。したがって、 'endl'は、' stdout'の正しい行末(CR/LF/CRLF)に変換されますが、ファイル出力は変換されません。そうですか? – anishsane

+0

申し訳ありませんが、私が言ったことを無視してください。ファイルはテキストモードで開かれます。 –

関連する問題