-3
#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{

char FirstName[50];

char LastName[50];

char MyFirstName[5] = "Bill";

char MyLastName[10] =  "Dillinger";

cout << "Enter your first name" << endl;

cin >> FirstName;

cout << "Enter your last name" << endl;

cin >> LastName;

if (FirstName && LastName) {

cout << "Hello " << FirstName << " " << LastName << endl;

} else if(FirstName == MyFirstName && LastName == MyLastName) {

cout << "Hello, my creator!" << endl;

};


system("pause");

return 0;

}

Using the code above, I always get the first result from the if statement. I never get "Hello, my creator!" even if i input my name. How do I fix this code?

4

3 回答 3

1

让我们来看看这个。

#include "stdafx.h"
#include <iostream>

using namespace std;

int main()
{

到目前为止很好,但这里有一个简短的插曲: 花时间正确缩进你的代码。这将使维护变得更加容易。你以后会感谢我的。

在 C++ 中,您不需要使用 C 风格的字符串。但是你说你必须这样做,这让我想知道为什么你的导师没有让你使用 C。但无论如何。

    char FirstName[50];
    char LastName[50];
    char *MyFirstName = "Bill";
    char *MyLastName =  "Dillinger";

进行:

    cout << "Enter your first name" << endl;
    cin >> FirstName;

    cout << "Enter your last name" << endl;
    cin >> LastName;

到目前为止很好,但是根据您的if声明,我们遇到了一个问题。基本上,在您的旧代码中,FirstName 和 LastName 是指向为您分配的一块 RAM 的指针。它总是被分配的,因为你是在堆栈上完成的。(也就是说,你没有使用newand delete。)那些指针永远不会是NULL,所以你的比较总是正确的!此外,在我的版本中,我使用一个标准的 C 函数调用来比较指针指向strcmp的字符串。 这是一个重要但微妙的点。, , 等。人。都是指向您使用上述语法保留的 RAM 块的指针。如果你直接比较它们,你就是在比较两个数字。 LastNameMyFirstName[50]

所以,我会改变你的if块,因为第二个测试(平等)绝对是有意义的。

    if(strcmp(FirstName, MyFirstName) == 0 && strcmp(LastName, MyLastName) == 0) {

strcmp0如果两个字符串相等则返回。

        cout << "Hello, my creator!" << endl;
    }
    else {
         cout << "Hello " << FirstName << " " << LastName << endl;
    }

而且我们免费回家了!请注意,以下system("pause")命令对您来说可以正常工作,就像您在 Windows 上一样。请记住,它不能移植到 Linux 等其他平台。

    system("pause");

    return 0;
}

希望有帮助!

于 2013-10-23T04:05:05.233 回答
0

您的第一个 IF 语句将始终为真,因此第二个将永远不会执行。
因此从该语句中删除“其他”。
该程序应该可以正常工作。

if(strcmp(FirstName,MyFirstName) && strcmp(LastName,MyLastName))
{
    cout << "Hello, my creator!" << endl;
};

只是一个提示。使用指针总是更好!

于 2013-10-23T04:22:49.003 回答
0

这没有任何意义

if (FirstName && LastName)

它没有意义的原因是它总是正确的, FirsName 和 LastName 总是 != 0 因为它们是数组地址。

如果您想读取这样的数组,请使用getline()

std::cin.getline (FirstName,sizeof(FirstName));

现在,当您有数组时,像您一样比较它们是没有意义的,数组名称是地址,因此将 FirstName 与 MyFirstName 进行比较永远不会是真的

else if(FirstName == MyFirstName && LastName == MyLastName) 

相反,您需要比较数组的内容,这可以是strcmp

else if (!strcmp(FirstName,MyFirstName) && !strcmp(LastName,MyLastName))
于 2013-10-23T04:11:43.207 回答