以下代码始终提供'draw!'作为输出

The following code always give 'draw!' as output

本文关键字:draw 输出 代码      更新时间:2023-10-16

我不明白为什么下面的代码总是打印'draw!你能帮我弄明白吗?

#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 << "nn 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;
    }

这段代码中的问题存在于类似if (choice2 == "SCISSORS")的代码中因为这是一个指针比较。

我建议现代化这段代码并使用std::string而不是char [50],因为您不必担心这些字符串的内存,也不必担心字符串被存储为数组的事实。