2017-09-09 23 views
0

プログラムの説明: sales.datという名前のデータファイルを読み取るプログラムを作成します。 プログラムは、各店舗の売上を比較する棒グラフを表示し、売上棒グラフをファイル名results.datに出力する必要があります。 アスタリスクの行を表示して棒グラフの各バーを作成します。各アスタリスクは100ドルの売上を表します。プログラムは動作していたが、動作を停止した

これは、Visual Studioのsales.txtとresults.txtに2つのリソースファイルを使用しています。だから、基本的に、私はプログラムが働いていた、と私は割り当てのためにそれを提出した。私は今日それを再開してそれを混乱させ、それは完全に機能しなくなった。それはsales.txtから読んでいないようです。 sales.txtには、各行にランダムな整数が入っています。例では、1000,1200,1400です。結果にはresults.txtとコンソールの各行に10,12,14のアスタリスクが表示されます。 店舗:2: など、ないアスタリスクを示さない

問題

は、それが 店1が言うことです。私は販売を割り当てる後にする必要が

 int main() { 

int storeAmount = 0; 
double sales = 0.0; 
int starAmount = sales/100; //gets the amount of stars needed 
ifstream inFile("sales.txt"); //opens the file sales.txt which is a resource file 
ofstream outFile("results.txt"); //opens the file results.txt which is our output file 
string outputStars = ""; //holds the stars for the bar graph 

cout << "Please input the amount of stores:" << endl; //input the amount of stores 
cin >> storeAmount; 

    cout << "SALES BAR CHART:" << endl; //header output 
    cout << "Each * = $100" << endl; 

    for (int storeNum = 0; storeNum < storeAmount; storeNum++) { //loops to the max store amount 

     inFile >> sales; //variable sales holds the value of each of the lines in sales.txt 


     for (int i = 0; i < starAmount; i++) { //adds stars onto the string 
      outputStars += "*"; 
     } 

     cout << "Store " << storeNum + 1 << ": " << outputStars << endl; //ouputs in the console 
     outFile << "Store " << storeNum + 1 << ": " << outputStars << endl; //outputs to the file 

     if (inFile.eof()) { //stops the duplication of the last line if the store amount is greater than the numbers in sales.txt 
      break; 
     } 

    } 

outFile.close(); //closes the files 
inFile.close(); 

system("pause"); 
return 0; 
} 
+0

を完了するために行われる変更についてのコメントを追加あなたのコードを変更しました。それは常に0になります。 –

+0

私はばかです。 int starAmount = sales/100;私はファイルから売上を入力した後にする必要があります。 – Cory

+0

コードを正しくインデントしてください。正しく動作しないかもしれませんが、少なくともそれを読みやすくするかもしれません.... – jpo38

答えて

0
int starAmount = sales/100; 

+0

複数の文字を含む文字列を作成する'std :: string outputStars(starAmount、 '*')'コンストラクタを使うことができます –

0

すべてのアドバイスを一緒に組み合わせること - 私は少しあなたが売上を読む前に、あなたはstarAmountを計算することはできません行われ、いくつかのタスクがプログラム

#include <string> 
#include <iostream> 
#include <fstream> 

//format your code properly 
int main() { 

    std::ifstream inFile("sales.txt"); //opens the file sales.txt which is a resource file 
    std::ofstream outFile("results.txt"); //opens the file results.txt which is our output file 
    //todo - check that files are opened 

    std::cout << "Please input the amount of stores:\n"; //input the amount of stores 

    int storeAmount = 0; //declare var as close to usage as possible 
    std::cin >> storeAmount; 
    //todo use if(std::cin >> storeAmount) instead to check that input was proper 

    std::cout << "SALES BAR CHART:\n"; //header output 
    std::cout << "Each * = $100\n"; 

    for (int storeNum = 0; storeNum < storeAmount; storeNum++) { //loops to the max store amount 

     //declare var as close to usage as possible 
     double sales = 0.0; 
     //check the result of input operation before using the value read 
     //instead of using eof postfactum 
     if(inFile >> sales) { //variable sales holds the value of each of the lines in sales.txt 

      //declare variable in the smallest scope possible 
      int starAmount = sales/100; //gets the amount of stars needed 

      //use constructor instead of loop 
      std::string outputStars(starAmount, '*'); //holds the stars for the bar graph 

      std::cout << "Store " << storeNum + 1 << ": " << outputStars << '\n'; //ouputs in the console 
      outFile << "Store " << storeNum + 1 << ": " << outputStars << '\n'; //outputs to the file 
     } 
     else { 
      break; 
     } 
    } 

    outFile.close(); //closes the files 
    inFile.close(); 

    return 0; 
} 
関連する問題