2017-10-10 31 views
0

我的问题是我如何添加到我的for循环,以便当它进行多次迭代时,变量将相互覆盖?For循环允许变量相互覆盖

我试图把一个输入文本文件与三元股份像这样:

*谷歌(GOOG)

522.01 2 100

520.66 1.5 80

苹果公司(AAPL)

389.27 2 150

401.82 1.8 1 50

微软(Microsoft)

25.06 2.5 100

25.07 2 80 *

再后来打印/写到输出文本文件。

现在,当它重复运行3次时,它只显示股票1及其正确的数字,但是错误的数字和其他名称都没有。那么,我将如何去做,以便下一次迭代将覆盖并打印另一组答案?

下面

是对部分代码,我有:

for (int x = 1; x <= 3; x++) // for loop to run this part of program 3 times 

{ 

    getline(dataIn, stockName);//Gets the whole first line 


    dataIn >> buyingAMT;//These just store whatever is in the line before every space, and sets it with a name 
    dataIn >> buyingComm;//So like it takes the characters leading up to the first space and stores it as buyingAMT. 
    dataIn >> numberBought; 
    dataIn >> sellingAMT; 
    dataIn >> sellingComm; 
    dataIn >> numberSold; 



    //writing to a file 


    buyingComm = buyingComm * buyingAMT;//Mathematical Calculations 

    buyingAMT = buyingAMT * numberBought; 

    sellingComm = (sellingComm/100) * numberSold; 

    sellingComm = sellingComm * sellingAMT; 

    sellingAMT = sellingAMT * numberSold; 

    profit = (sellingAMT - sellingComm) - (buyingAMT + buyingComm); 

    //Displaying the calculated answers 
    fout << setw(20) << left << stockName; 

    fout << setprecision(2) << fixed << setw(15) << right << buyingAMT; 

    fout << setprecision(2) << fixed << setw(15) << right << buyingComm; 

    fout << setprecision(2) << fixed << setw(15) << right << sellingAMT; 

    fout << setprecision(2) << fixed << setw(15) << right << sellingComm; 

    fout << setprecision(2) << fixed << setw(15) << right << profit << endl; 

    //Storing the results into the overall variables to be used later 
    /*totalBuyingAMT += buyingAMT; 
    totalBuyingComm += buyingComm; 
    totalSellingAMT += sellingAMT; 
    totalSellingComm += sellingComm; 
    grandProfit += profit; 
    */ 

} 
getline(dataIn, junk);//Cleans the remaining unread data 

dataIn.close();//closes the input file, so it cant be read any longer 

fout.close(); 

cout << "congrats you are either now screwed or rich!"; 

return 1; 

}

what I get as output

what i need to get

+1

这可以帮助你。 https://stackoverflow.com/questions/20080255/mixing-formatted-input-extractors-with-getline-causes-cout-display-to-stick-toge P.S.请删除C#标签,它们不是一回事。 –

+0

从'main'返回非零表示失败。 –

回答

1

变量,只要它们不const总是可以重写或复制。从代码中看起来像是如何提取文本的问题。

dataIn >> buyingAMT;//These just store whatever is in the line before every space, and sets it with a name 
dataIn >> buyingComm;//So like it takes the characters leading up to the first space and stores it as buyingAMT. 
dataIn >> numberBought; 
dataIn >> sellingAMT; 
dataIn >> sellingComm; 
dataIn >> numberSold; 

那么什么样的类型dataIn和其他变量呢?好像你没有正确地分割文本,或者没有办法从dataIn中做到这一点。

这是一条线从标准输入取(虽然它可以是任何流)的一个小例子

#include <iostream> 
#include <string> 

int main() { 
    int i; 
    std::string input; 
    for(i=0;i<3;i++) 
    { 
    std::cout << "Please give me some input:"; 
    std::cin >> input; 
    std::cout << "You gave me:" << input << std::endl; 
    } 
} 

ofstream fout;//data type used to write the data taken from input file and put it on output file 
fout.open(output_File_Name); 

if (fout.fail()) 
{ 
    fout << "Input file not found: " << output_File_Name << endl; 
    system("pause"); 
    return 0; 
} 

fout << setw(20) << left;//Setting the labels 
fout << "STOCK"; 

fout << setw(15) << right; 
fout << "BUYING AMT"; 

fout << setw(15) << right; 
fout << "BUYING COMM"; 

fout << setw(15) << right; 
fout << "SELLING AMT"; 

fout << setw(15) << right; 
fout << "SELLING COMM"; 


fout << setw(15) << right; 
fout << "PROFIT" << endl; 
+0

我有dataIn as ifstream dataIn。其他变量也是双变量。 –

+0

是每个股票名称,它的价值都在一条线上,并且每个股票都是连续的线? –

+0

你的意思是当它被写入文件或读取?如果你的意思是书面的,那么每一行的股票名称都不会下降。每个值虽然在purchaseAMT,BuyingComm等方面都在一行 –