首页 > 解决方案 > 将打印的文本与之前的文本放在同一行

问题描述

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

#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

标签: c++

解决方案


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

#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;
    }
}

推荐阅读