我的c ++程序不断崩溃,我的代码不好吗?

时间:2017-03-31 21:21:31

标签: c++ crash

有人可以查看我的代码是否错误?执行时我的命令提示符崩溃。

我将问题缩小到这一部分:

    string result = "";
    result = pwpasst (username, password, "admin", "123");
    result = pwpasst (username, password, "root", "456");
    result = pwpasst (username, password, "peter", "789");

如果我评论出3个功能中的2个,它似乎有效。 + 我不知道我的代码是坏的还是我的命令提示符有问题。

其余代码:

#include <iostream>

using namespace std;

    string pwpasst (string username, string password, string un, string pw){
        if (username == un && password == pw)
        {
            return "You are logged in!";
        }
    };

int main()
{
    string username;
    string password;

    cout << "Enter your username: ";
    cin >> username;

    cout << "Enter your password: ";
    cin >> password;


    string result = "";
    result = pwpasst (username, password, "admin", "123");
    result = pwpasst (username, password, "root", "456");
    result = pwpasst (username, password, "peter", "789");

    if (result != "You are logged in!"){
        cout << "Wrong password or username!";
    }   else { cout << result;}
}

2 个答案:

答案 0 :(得分:1)

如果if (username == un && password == pw)为false,则缺少return语句,并且根据函数定义,函数最后需要返回string值。这会调用未定义的行为,导致程序因运行时错误而终止。

答案 1 :(得分:1)

pwpasst()可能会返回字符串“你是......”

但缺少else子句并且没有返回任何内容,这是一个逻辑错误。 你的函数应该总是返回它承诺的字符串。

with open('Catagories', 'a') as myfile:
    ...

不是一个好的选择,因为之前每次都会输出1或2条错误消息。

在此代码段中,将始终执行三个分配。

string pwpasst (string username, string password, string un, string pw)
{
   if (username == un && password == pw)
   {
      return "You are logged in!";
   }
   else 
   {
      // perhaps - but not a good choice.
      std::cerr << "unknown user name or password" << std::endl;
      return ""; // return null string
   }
};

你想在得到结果时突破,如下所示(但这也不是一个好选择):

string result = "";
result = pwpasst (username, password, "admin", "123");
result = pwpasst (username, password, "root", "456");
result = pwpasst (username, password, "peter", "789");

可能需要将错误消息放在此代码段中,而不是放在函数中。

需要进行一些逻辑更改。也许函数应该返回一个bool(表示有效名称/ pw与否),并且字符串'result'可能通过引用传递给要填写的函数。