C ++程序,控制台/终端输出。如何实施"更新文本"

时间:2015-09-30 16:56:09

标签: c++ terminal cout

我正在编写一个C ++程序,它运行一个长数据分析算法。完成运行需要几天时间,因此提示输出"百分比完成"每次程序中的一个新循环开始,以便用户(我)知道计算机不是在某个地方无限循环或已经崩溃。

目前我这样做是最基本的方式,通过将完成百分比计算为浮点数并执行:

//initial input: anagram("", "abc")
//STEP 1: enter the function --> i = 0 for original string "abc"
  //anagram("" + "a", "bc") ----> anagram("a", "bc")
//STEP 2: loop through the new, modified string, which is now "bc"
    //var i = 0;
    //anagram("a" + "b", "c")---> anagram("ab", "c")
    //anagram("ab" + "c", [nothing here])
      //base case hit, so uniqueOutput["abc"] = 1;
    //var i = 1; --> this applies to the string "bc". the loop gets reset to i = 0 once you have a new string to worth with (like below, with "b")
    //anagram("a" + "c", "b")
    //anagram("ac", "b")
    //anagram("ac" + "b", "" )
      //base case hit, so uniqueOutput["acb"] = 1;  
//STEP 3: increment up on the original string input ("abc") --> so now you are dealing with str[i] === b
  //var i =  1;
  //anagram("" + "b", "a" + "c")
    //anagram("b", "ac")  ---> now we need to loop through "ac"!
      //anagram("b" + "a", "c")
        //anagram("ba", "c") 
          //anagram("bac", "")---> base case hit, uniqueOutput["bac"] = 1;
    //anagram("b", "ac")
      //anagram("b" + "c", "a") ---> anagram("bc", "a")
        //anagram("bca", "") ---> base case hit, uniqueOutput["bca"] = 1;
//STEP 4: increment up on the original string input ("abc") ---> str[i] === c
  //var i = 2;
  //anagram ("" + "c", "ab")---> anagram("c", "ab")
    //now we need to loop through "ab!" c's index stays the same.
    //anagram("c" + "a", "b") ---> anagram("ca", "b")
      //anagram("cab", '')---> uniqueOuput["cab"] = 1;
    //anagram("c" + "b", "a") ---> anagram("cb", "a")
      //anagram("cba", "")----> uniqueOutput["cba"] = 1

但是,当程序有一百万个循环运行时,这有点混乱。另外,如果终端回滚只有1000行,那么一旦程序完成0.1%,我就会丢失在开始时打印出来的初始调试信息。

我想复制一个我在其他程序中看到过的想法,而不是每次写完一个新行完成百分比,我只需用新的百分比完成替换写入终端的最后一行。

我该怎么做?那可能吗?如果是这样,这可以通过跨平台方式完成吗?有几种方法可以做到这一点吗?

我不确定如何清楚地描述我想要做的事情,所以我希望这清楚地表明你理解我想要做的事情。

澄清,而不是看到这个:

std::cout << "Percentage complete: " << percentage_complete << " %" << std::endl;

我想看到这个:

Running program.
Debug info:
Total number of loops: 1000000

Percentage complete: 0 %
Percentage complete: 0.001 %
Percentage complete: 0.002 %
.
.
.
Percentage complete: 1.835 %

然后在下一个循环中,终端应该更新为:

Running program.
Debug info:
Total number of loops: 1000000

Percentage complete: 1.835 %

我希望有足够的信息。

(好的,所以这个输出实际上是100000步,而不是1000000步。)

1 个答案:

答案 0 :(得分:1)

使用\n而不是std::endl\r。不同之处在于,如果没有新行的行,后者会将光标返回到开头。

免责声明(根据Lightness&#39;异议):这不一定是便携式的,所以YMMV。