C ++以前的文本被删除并被终端中的新文本替换

时间:2018-02-13 05:31:06

标签: c++ visual-c++

这是我的代码。

#include <iostream>
#include <string>
#include <windows.h>
#include <iomanip>
using namespace std;

int main(){

char choice;

do{
    double x;
    double y;
    char z;
    double sum;

    cout << "Pick a operation + - * /" << endl;
    cin >> z;
    cout << "Enter a number" << endl;
    cin >> x;
    cout << "Enter another number" << endl;
    cin >> y;
    if (z == '+'){
        sum = x + y;
        cout << "Answer: " << sum << endl;
    }
    else if (z == '-'){
        sum = x - y;
        cout << "Answer: " << sum << endl;
    }
    else if (z == '-'){
        sum = x - y;
        cout << "Answer: " << sum << endl;
    }
    else if (z == '*'){
        sum = x * y;
        cout << "Answer: " << sum << endl;
    }
    else if (z == '/'){
        sum = x / y;
        cout << "Answer: " << sum << endl;
    }
    cout << "Would you like to enter another equation? (y/n)" << endl;
    cin >> choice;
} while (choice != 'n');
if (choice == 'n'){
    return 0;
}


system("PAUSE");
return 0;
}

我要做的是让它不是每个新的cout转到另一行,而是替换当前行。基本上,一切都会在一行中发生,cin除外,cout将显示在\r下方的行中。我知道我可以使用cin,但cout会尝试覆盖cin。我希望删除cout输入,然后cout将替换之前的STR_TO_DATE

我是一个初学者,所以我真的不知道该怎么做。

2 个答案:

答案 0 :(得分:1)

虽然有办法做到这一点,但没有一个是标准的。此链接显示ANSI转义序列,但每个终端都不同,请记住文档是您的朋友。ANSI Escapes

答案 1 :(得分:1)

现代控制台模拟器足够快,您可以清除屏幕并只是重新打印要保留的文本,而不会出现明显的闪烁。如上所述,您还可以使用curses库。

您知道这一点,但是:当您打印回车字符\r时,许多终端会执行此操作。历史上,当电传类型具有物理打字机打印轮和托架时,这将使托架返回到左侧位置并允许覆盖。在某些机器上(包括经典的Macintoshes),这将做其他事情,但它可以在今天的大多数控制台上运行,包括Windows cmd.exe,OS X和Linux。