2016-10-31 71 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

您是否明白'temp'必須是負數,才能採用'else'分支?因爲這就是'if'陳述所說的。所以,如果'temp'是負值,pop測驗:你認爲'temp/3'會是正值還是負值?你知道'printStars'必須是正面的,所以你認爲'while(numberOfStars> printStars)'是真的可能性是什麼? –

+0

是的,我明白temp必須是否定的執行else語句。我想我只是不明白這個邏輯。這是我明白的事情。 -21/3 = -7。所以,(-7> 0)打印'*'。所以,因爲它沒有什麼發生。然而,當我將while語句切換到while(numberOfStars

回答

1

哦,只要把你的printStars = 0;在一段時間:)

,做numberOfStars = temp/3 + 1;如果你想有一個明星對於臨時< 3.

編輯:可以簡化很多代碼。你可以非常容易地創建一個字符串,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; 
}