2016-03-22 21 views
3

Kodumda bir sorunum var, kod çalışıyor ama tüm numaralar her yerdedir.Kod çalışır, ancak her şey düzgün değil

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: Burada

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

kod şudur: benim problem olan bildiğim

#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; 

} 

ve altındadır

double a; 
double b; 

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

    } 

Bu kod satırını kaldırdığımda kod mükemmel bir şekilde çalışır, ancak bu çizgiye ihtiyacım var, böylece ortalamaları yağış miktarına indirebilirim. İşte aldığım şeyin bir resmi.

alıyorum ne

Resim - Ben gerekiyor ne pic1

Resim - Geçtiğimiz saatlerce bu düzeltmek için nasıl anlamaya çalışırken üzerinde çalışıyoruz pic2

ve Neyin yanlış olduğunu henüz anlamadım.

Daha fazla bilgi: Hemen hemen maliyetin, iki ayrı "metin dosyasından" temel olarak bunları bir araya getirerek, yağışlar.txt adlı üçüncü bir metin dosyasına birleştirilmesi gerekiyordu ve orada bir tane diğerini çıkarmak için açık.

+4

O çok daha yararlı burada düz metin olarak çıkışı olacaktır. – tadman

+3

Neden sabit boyutlu bir 'char' arabelleği yerine std :: string' kullanılmıyor? C++, taşma hatalarına maruz kalmanın üstesinden gelmenizi şiddetle tavsiye eder. – tadman

+1

Neler olup bittiğini görmek için "\ t" yi kaldırmayı mı yoksa kod deyiminizi mi aşmayı denediniz? –

cevap

1

döngü olmalıdır:

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

Düzenli bir Cpp programcısı değilim. Yani, 'endl', 'stdout' için doğru satır sonlarına (CR/LF/CRLF) çevirir, ancak dosya çıkışı için değil. Öyle mi? – anishsane

+0

Üzgünüm, söylediğimi görmezden gel. Dosya metin modunda açılır, iyi. –

İlgili konular