2013-05-19 10 views
5

तो मेरे पास एक कंसोल विंडो में यादृच्छिक% प्रगति करने के लिए एक फ़ंक्शन है (या इसके बजाय, मैं इसे बाद में फ़ंक्शन में बदल दूंगा); इस तरह:कंसोल प्रगति पट्टी बनाना? (विंडोज़)

#include <iostream> 
#include <time.h> 
#include <cmath> 
#include <windows.h> 

using namespace std; 

int main() 
{ 
    srand(time(0)); 
    int x = 0; 

    for(int i = 0; i<100; i++){ 
     int r = rand() % 1000; 
     x++; 
     cout << "\r" << x << "% completed." << flush; 
     if(i < 43){ 
      Sleep(r/6); 
     }else if(i > 43 && i < 74){ 
      Sleep(r/8); 
     }else if(i < 98){ 
      Sleep(r/5); 
     }else if(i > 97 && i != 99){ 
      Sleep(2000); 
     } 
    } 

    cout << endl << endl << "Operation completed successfully.\n" << flush; 
    return 0; 
} 

बात है, मैं उत्पादन इस तरह रहना चाहता हूँ:

1% completed 

| 

(बाद में ...)

25% completed 

||||||||||||||||||||||||| 

मैं ऐसा कैसे कर सकता है?

अग्रिम धन्यवाद!

+0

दो लाइनों में, आप नहीं कर सकते। एक पंक्ति के बारे में "एक्स% पूरा |||||" ... "एक्सएक्स% पूरा |||||||||||" ... –

उत्तर

13

मुद्रण चरित्र '\r' उपयोगी है। यह कर्सर को लाइन की शुरुआत में रखता है।

25% completed: |||||||||||||||||| 

प्रत्येक यात्रा के बाद:

जब से तुम पिछली पंक्ति पर अब और उपयोग नहीं कर सकते, तो आप कुछ इस तरह हो सकता है

int X; 

... 

std::cout << "\r" << percent << "% completed: "; 

std::cout << std::string(X, '|'); 

std::cout.flush(); 

इसके अलावा, आप उपयोग कर सकते हैं: Portable text based console manipulator

+0

धन्यवाद, यह काम करता है! लेकिन क्या दो लाइनों पर ऐसा करने का कोई तरीका नहीं है? – Adam

+0

ओह, लेकिन किसी कारण से, यह% काउंटर तोड़ता है .. 66% के बाद, जब यह कंसोल एज तक पहुंच जाता है, तो यह एक नई लाइन – Adam

+0

पर पूरा% प्रिंटिंग करता रहता है ''' की संख्या से बचने की कोशिश करें लाइन से अधिक है लंबाई। – deepmax

0

मुझे लगता है कि यह बेहतर दिखता है:

#include <iostream> 
#include <iomanip> 
#include <time.h> 
#include <cmath> 
#include <windows.h> 
#include <string> 

using namespace std; 
string printProg(int); 

int main() 
{ 
    srand(time(0)); 
    int x = 0; 
    cout << "Working ..." << endl; 
    for(int i = 0; i<100; i++){ 
     int r = rand() % 1000; 
     x++; 
     cout << "\r" << setw(-20) << printProg(x) << " " << x << "% completed." << flush; 
     if(i < 43){ 
      Sleep(r/6); 
     }else if(i > 43 && i < 74){ 
      Sleep(r/8); 
     }else if(i < 98){ 
      Sleep(r/5); 
     }else if(i > 97 && i != 99){ 
      Sleep(1000); 
     } 
    } 

    cout << endl << endl << "Operation completed successfully.\n" << flush; 
    return 0; 
} 

string printProg(int x){ 
    string s; 
    s="["; 
    for (int i=1;i<=(100/2);i++){ 
     if (i<=(x/2) || x==100) 
      s+="="; 
     else if (i==(x/2)) 
      s+=">"; 
     else 
      s+=" "; 
    } 

    s+="]"; 
    return s; 
} 
संबंधित मुद्दे