C ++输出错误的字符串

时间:2013-10-23 03:45:34

标签: c++

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

}

使用上面的代码,我总是从if语句中得到第一个结果。我永远不会得到“你好,我的创造者!”即使我输入我的名字。我该如何修复此代码?

3 个答案:

答案 0 :(得分: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为了你。它总是被分配,因为你是在堆栈上完成的。 (也就是说,你没有使用newdelete。)这些指针永远不会是NULL,所以你的比较永远都是真的!另外,在我的版本中,我使用名为strcmp的标准C函数来比较指针指向的字符串这是一个重要但微妙的观点。 LastNameMyFirstName等。人。都是指向您使用上面的[50]语法保留的RAM块的指针。如果直接比较它们,则需要比较两个数字。

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

    if(strcmp(FirstName, MyFirstName) == 0 && strcmp(LastName, MyLastName) == 0) {
如果两个字符串相等,

strcmp将返回0

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

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

    system("pause");

    return 0;
}

希望有所帮助!

答案 1 :(得分: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))

答案 2 :(得分:0)

您的第一个IF声明将始终为真,因此第二个永远不会被执行 因此从该陈述中删除'else' 该计划应该正常。

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

只是小费。使用指针总是更好!