将打印文本放在与其前面的文本相同的行中

时间:2018-05-29 19:41:51

标签: c++

我目前正在制作一个基本的程序设计,表现得有点像一个chell。代码在这里:

#include <iostream>
#include <cstdlib>
#include <time.h>
#include <Windows.h>
#include <Stdio.h>
#include <string>

using namespace std;

main()
{
    SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE),10);
    std::string name;
    std::string pass;
    std::string msg;
    int x = 1;
    srand(time(0));
    cout << "Booting up system..." << endl;
    cout << "Serial Code: " << (rand()%1000) << "." << endl;
    cout << "Username: ";
    std::getline(std::cin, name);
    cout << "Password: ";
    std::getline(std::cin, pass);
    cout << "" << endl;
    while (true)
    {
        cout<<x<<": ";
        std::getline(std::cin, msg);
        x += 1;

        if (msg == "Hello!"){
        cout << "Hi!" << endl;
        }

        if (msg == ""){
        cout << "[No Text Inserted]" << endl;
    }
    system ("pause");
}

并且,如果没有输入文本,则显示:

1:
[No Text Inserted]

如何获得此输出?

1: [No Text Inserted]

提前谢谢! -DJ

2 个答案:

答案 0 :(得分:0)

在if语句中,将字符串存储到变量中并最后打印出来。此外,如果您要比较同一个变量,我建议使用if else语句。它使它更具可读性。所以:

string output;
if (msg == "Hello!)
{
    output = "Hi!";
} 
else if (msg == "")
{
    output = "[No Text Inserted]";
}
output = x.str() + ": " + output;

cout << output << endl;

尝试一下,让我知道这是否有效。

答案 1 :(得分:0)

你可以做的是记住输入光标位置,如果输入是空字符串,返回到该位置并打印失败消息,如下所示:

#include <iostream>
#include <string>
#include <windows.h>

int main()
{
    HANDLE conout = GetStdHandle(STD_OUTPUT_HANDLE);
    std::string input;
    std::cout << "Enter something: ";

    // remember cursor position
    CONSOLE_SCREEN_BUFFER_INFO info;
    COORD inputPos = GetConsoleScreenBufferInfo(conout, &info) ? info.dwCursorPosition : COORD{ 0, 0 };

    if (!std::getline(std::cin, input) || input.empty())
    {
        SetConsoleCursorPosition(conout, inputPos);
        std::cout << "[No Text Inserted]" << std::endl;
    }
}