以下代码总是给出“绘制!”#39;作为输出

时间:2016-08-13 12:52:02

标签: c++

我不明白为什么下面的代码总是会打印出来!'。你能帮我搞清楚吗?

#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>

void main()

{
    clrscr();

    int choice1;
    char choice2[50];
    int compare(const char*, const char*); //prototype
    char s[100];
    cout << "\n\n WELCOME TO STONE PAPER SCISSORS " << endl
         << endl;
    cout << " enter your choice" << endl;

    cout << "\n 1:SCISSORS \n";
    cout << "\n 2:ROCK \n";
    cout << "\n 3:PAPER \n";
    cout << "enter choice number";
    cin >> choice1;

    if (choice1 == 2) {
        cout << "you have entered Stone!";
        strcpy(s, "ROCK");
    }
    if (choice1 == 1) {
        cout << "you have entered scissors";
        strcpy(s, "SCISSORS");
    }
    if (choice1 == 3) {
        strcpy(s, "PAPER");
        cout << "you have entered paper";
    }
    randomize();
    float point = 2;
    float compchoice;
    compchoice = random(point);

    if (compchoice < 0.37) {
        strcpy(choice2, "ROCK");
    }
    else if (compchoice < 0.64) {
        strcpy(choice2, "PAPER");
    }
    else {
        strcpy(choice2, "SCISSORS");
    }

    cout << endl;
    cout << "User Choice=" << s << endl;
    cout << "Computer Choice=" << choice2 << endl;
    cout << s << "\t"
         << "VS"
         << "\t" << choice2 << "="
         << " ";

    int p = compare(s, choice2);
    if (p == 1) {
        cout << "computer wins";
        if (p == 0)
            cout << "user wins";
        if (p == -1)
            cout << "draw!";

        getch();
    }
    int compare(const char* s, const char* choice2)
    {
        if (s == "SCISSORS") {
            if (choice2 == "ROCK")
                return 1;
            else
                return 0;
        }
        else if (s == "ROCK") {
            if (choice2 == "SCISSORS")

                return 0;
            else
                return 1;
        }
        else if (s == "PAPER") {
            if (choice2 == "SCISSORS")
                return 1;
            else
                return 0;
        }
        else
            return -1;
    }

1 个答案:

答案 0 :(得分:3)

The problem in this code lies within code like if (choice2 == "SCISSORS") as this is a pointer comparison. For details, see this stack overflow post.

I would suggest modernizing this code and use std::string instead of char [50] as you have to worry less about memory for these strings, nor the fact that strings are stored as arrays.

相关问题