2016-10-31 1 views
1

ローカルファイルから読み込まれた温度を表示する折れ線グラフを作成しようとしています。現在、グラフィカルな出力を除いて、すべてが意図したとおりに動作しています。C++線グラフ演技ファンキー

今、負の数の私のelseステートメントが正しく機能していません。さらに、いくつかの数字は表示されているように見えますが、いくつかの数字は表示されていませ

表示されている数字は「*」の右の数を示すされていない最後には、私は近くにいますが、コードを解読することはできません知っている...

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

using namespace std 

int main() 
{ 

//Variable declarations 
int numberOfStars; 
int printStars; 
int temp; 
int count = 0; 
string lineBreak = " | "; 



ifstream tempData; 
tempData.open("tempData.txt"); 

cout << "Temperatures for 24 hours: " << endl; 
cout << " -30  0  30  60  90  120" << endl; 

printStars = 0; 

while (count < 24) { 
    tempData >> temp; 

    if (temp >= 0) { 
     numberOfStars = temp/3; 
     cout << setw(4) << temp << setw(10) << lineBreak; 

     while (printStars < numberOfStars){ 
      cout << '*'; 
      printStars++; 
     } 
     cout << endl << endl; 

    } 

    else { 
     numberOfStars = temp/3; 

     while (numberOfStars > printStars) { 
      cout << '*'; 
      printStars++; 
     } 
     cout << setw(4) << temp << setw(10)<< lineBreak << endl << endl; 

    } 

    count++; 

} 

//Closing program statements 
system("pause"); 
return 0; 

現在、それが出力されています。

事前に助けを

Output

感謝。

+0

'else'ブランチを実行するには、' temp'は負でなければならないことを理解していますか?それは 'if'ステートメントが言っているものですから。だから、 'temp'が負の場合、pop quiz:' temp/3'が正または負になると思いますか? 'printStars'は肯定的でなければならないことを知っていますので、' while(numberOfStars> printStars) 'の可能性はどのようなものでしょうか? –

+0

ええ、私は、実行するelse文が負でなければならないことを理解しています。私は論理を理解していないと思う。これが私が理解していることです。 -21/3 = -7。したがって、(-7> 0)は '*'を出力します。それ以来、何も起こりません。しかしwhile文をwhile(numberOfStars

答えて

1

ああはちょうどしばらくあなたのprintStars = 0;を置く:)

そして、あなたは一時のため< 3.

EDITを1スターを持っているしたい場合はnumberOfStars = temp/3 + 1;の操作を行います。あなたはたくさんのあなたのコードを簡素化することができます。あなたはn時間の文字列を非常に簡単に作成することができます。あなたのコードは次のようになります:

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

using namespace std; 

int main() 
{ 

//Variable declarations 
int numberOfStars; 
int numberOfSpaces; 
int temp; 
int count = 0; 
string lineBreak = " | "; 
ifstream tempData; 
tempData.open("data.txt"); 

cout << "Temperatures for 24 hours: " << endl; 
cout << " -30  0  30  60  90  120" << endl; 

while (count < 24) { 
    tempData >> temp; 
    numberOfStars = temp/3 + 1; 

    if (temp >= 0) { 
     cout << setw(4) << temp << setw(10) << lineBreak; 
     cout << string(numberOfStars, '*'); 
    } 
    else { 
     cout << setw(4) << temp; 
     numberOfSpaces = 7 + numberOfStars; 

     // Prevent any ugly shift 
     if (numberOfSpaces < 0) 
     { 
      numberOfSpaces = 0; 
      numberOfStars = -7; 
     } 

     cout << string(7 + numberOfStars, ' '); 
     cout << string(-numberOfStars, '*'); 
     cout << lineBreak; 
    } 
    cout << endl << endl; 
    count++; 

} 

//Closing program statements 
cin.get(); 
return 0; 
} 
関連する問題