-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 のチャンクへのポインターでした。スタック上で行ったので、常に割り当てられます。(つまり、 and を使用しませんでしたnewdelete) これらのポインターが になることはないNULLため、比較は常に true になります。また、私のバージョンでは、ポインターが 指すstrcmp文字列を比較するために呼び出される標準の C 関数を使用しています。これは重要ですが微妙なポイントです。、、、など。アル。上記の構文で予約した RAM のチャンクへのすべてのポインターです。それらを直接比較すると、2 つの数値が比較されます。 LastNameMyFirstName[50]

if2 番目のテスト (等しいかどうか) は間違いなく意味があるので、ブロックを変更します。

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

strcmp02 つの文字列が等しいかどうかを返します。

        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 に答える