经营口号?

时间:2019-04-11 21:31:03

标签: string visual-c++

在此代码中,您将看到它要求输入密码。请注意,没有真正的密码系统设置。我是C ++的新手,而我实际上只是了解字符串。我了解它们,但效果不佳。它是操作后备词吗?我不完全了解字符串,所以不了解发生了什么。我尝试使用Google搜索,但找不到任何内容。

当我用密码翻转用户名时,它可以正常工作。那么为什么要运行后备词呢?

#include <iostream>
#include <string>




std::string password()
{
    std::cout << "Please enter your password. : ";
    std::string password;
    std::getline(std::cin, password);
    return password;
}

std::string username()
{
    std::cout << "Please enter your username. : ";
        std::string username;
        std::getline(std::cin, username);
        return username;
}
int main()
{

    std::cout << "Welcome to the test login! Please enter your username and password to enter. \n \n \n";
    std::cout << username() << password() << "\n \n \n";



    int noEnd{ 0 };
    std::cin >> noEnd;
    return 0;
}

请注意,如果我将密码与用户名交换了,则会起作用。

    std::cout << "Welcome to the test login! Please enter your username and password to enter. \n \n \n";
    std::cout << password() << username() << "\n \n \n";

但这对我来说没有意义。我了解C ++,并且刚刚学习了字符串的基础知识。从理论上讲,如果我有类似的代码,

    std::cout << "Welcome to the test login! Please enter your username and password to enter. \n \n \n";
    std::cout << username() << password() << "\n \n \n";

username()应该放在第一位,但是password()代替吗?

对不起,我知道请不要使用像奇怪的函数之类的东西,因为我可能不会理解它们。 。 。

1 个答案:

答案 0 :(得分:0)

您的编译器正在从右到左评估std::cout << password() << username() << "\n \n \n"

根据ccpreference

  

几乎所有C ++运算符的操作数求值顺序   (包括对函数参数的求值顺序   函数调用表达式和求值顺序   未指定任何表达式中的子表达式)。编译器可以   以任何顺序评估操作数,并且当   再次计算相同的表达式。

最好的选择是以不依赖于评估顺序的方式编写代码。

std::string u = username();
std::string p = password();

std::cout << u << p << "\n \n \n";