当我在控制台 C++ 程序中键入 STOP 时,我希望我的程序停止接受来自控制台的输入

I want my program to stop accepting input from console when I type STOP in console C++ Program

我正在制作一个接受用户输入(甚至是 \n)的 C++ 程序,但是当我键入 STOP 时程序应该停止,所以任何人都可以帮助我。早些时候我使用的是 getline,但也遇到了一些问题,比如当我输入 \n 两次(按两次输入)时,它会停止整个代码。

所以谁能指导我该怎么做,我想捕获整个输入,直到用户在控制台中键入 STOP。

谢谢。

    #include <iostream>
    using namespace std;
    
    int main()
    {
        cout<<"Main Started\n";
        char array[10];
        string str;
    
        while(fgets(array,sizeof(array),stdin))
        {
            str = (string) array;
            if(str=="STOP")  // This line is not getting executed. Also tried strcmp but of no use
                break;
           
        }
    
        cout<<"\nMain Ended\n";
        return 0;
    }

您可以使用 getline:

#include <iostream>
#include <string>

int main() {
    std::cout << "Main Started\n";
    std::string str;

    while(std::getline(std::cin, str)) {
        if(str == "STOP")  
            break;
    }

    std::cout << "\nMain Ended\n";
    return 0;
}

operator>>

#include <iostream>
#include <string>

int main() {
    std::cout << "Main Started\n";
    std::string str;

    while(std::cin >> str) {
        if(str == "STOP")  
            break;
    }

    std::cout << "\nMain Ended\n";
    return 0;
}

fgets() 在输出中包含 '\n',如果读取被 ENTER 终止,那么您需要检查一下,例如:

while (fgets(array, sizeof(array), stdin) != NULL)
{
    str = array;
    if (str == "STOP" || str == "STOP\n")
        break;
} 

或者:

while (fgets(array, sizeof(array), stdin) != NULL)
{
    if (strcmp(str, "STOP") == 0 || strcmp(str, "STOP\n") == 0)
        break;
} 
另一方面,

std::getline()(和 std::istream::getline())不要在输出中包含终止符 '\n'

while (getline(cin, str))
{
    if (str == "STOP")
        break;
}