按某个键

时间:2018-06-13 22:00:45

标签: c++

我正在努力学习C ++,我的第一个想法是制作简单的赢/输比率计算器,但它运行不佳。 这是我的代码:

#include<iostream>
#include<conio.h> 
using namespace std;

int match=0;
int win=0;
int lose=0;
int ratioo=1;
int total=0;


void lost()
{
if (match=='L');
lose=lose+1;
}

void won()
{
if (match=='W');
win=win+1;
}

int main() {

cout << "Welcome to winratio calculator!" << endl;
cout << "Pressing W adds one win point" << endl;
cout << "Pressing L adds one lose point" << endl;
cout << "Press ENTER to start" << endl;
cout << "Press ESC to close" << endl;
getch();

while(1)
{
cout << "Last game score: ";
cin >> match;
total++;

won();
lost();
ratioo=(win/total)*100;
cout << "Games won: " << win << endl;
cout << "Games lost: " << lose << endl;
cout << "Ratio: " << ratioo <<"%" << endl;
break;
}
return 0;
}

现在我的问题是:

1)按任意键后,获胜+1并失去同一时间

2)我不知道如何使用ENTER启动整个计算器并通过ESC通过getch()停止它;尝试了几种方法,但总是有一些错误(它应该一直添加点,直到按下ESC < / p>

非常欢迎解释!

1 个答案:

答案 0 :(得分:0)

好的,所以看起来我们的程序中有一些错误,就像现在一样。我们来看看吧!

第一件事是第一件事。请注意,在if语句的末尾有分号。

void lost()
{
     if (match=='L');    //NOTE: This is a useless if statement
          lose=lose+1;   //As is, this line will ALWAYS RUN regardless of what character is pressed.
}

void won()
{
     if (match=='W');  //Same as Above ^^^^^
          win=win+1;
}

请记住,在C语言中,if语句将有条件地执行下一个语句。还记得那个;在C中是一个声明。因此,通过在if语句后添加分号,您将使if条件无效,因为if语句将有条件地运行分号,而不是lose = lose + 1;

考虑改为写一下:

void lost()
{
    if (match == 'L')
    {
        lose = lose + 1;
    }
}

void won()
{
    if (match == 'W')
    {
        win = win + 1;
    }
}

此外,我注意到您已插入break命令以避免无限while(1)循环。避免这个问题。考虑使用match = _getch()而不是cin&lt;&lt;匹配。

match = _getch();

此外,由于截断,您的Ratioo变量没有收到任何除0之外的内容。要获得您正在寻找的百分比,您必须按照以下方式将您的胜利/总数加倍:

ratioo = ((double)win / (double)total) * 100;

所以,现在我们开始检测ESC和ENTER键!这真让人兴奋。因此,为了读入这些不可见的字符,您必须了解到计算机,这些键只是数字。 ESC键为27号,ENTER键为13号(查找完整列表的ASCII表)。因此,要检测它们,您需要执行以下操作:

match = _getch();

if (match == 27)        //27 is the ASCII Code for the Escape Key
{
    break;
}

如果您正在寻找Enter键,则只需替换13。通过在其周围添加A while(1)循环,您可以暂停程序直到按下该键(并忽略所有其他输入)。

我的代码的最终版本可以在下面查看:

#include<iostream>
#include<conio.h> 
using namespace std;

int match = 0;
int win = 0;
int lose = 0;
int ratioo = 1;
int total = 0;


void lost()
{
    if (match == 'L')
    {
        lose = lose + 1;
    }
}

void won()
{
    if (match == 'W')
    {
        win = win + 1;
    }
}

int main() {

    cout << "Welcome to winratio calculator!" << endl;
    cout << "Pressing W adds one win point" << endl;
    cout << "Pressing L adds one lose point" << endl;
    cout << "Press ENTER to start" << endl;
    cout << "Press ESC to close" << endl;
    while (1)
    {
        match = _getch();
        if (match == 13)        //13 is the ASCII Code for the Enter Key
        {
            break;
        }
    }

    while (1)
    {
        cout << "Last game score: ";
        match = _getch();

        if (match == 27)        //27 is the ASCII Code for the Escape Key
        {
            break;
        }

        total++;
        won();
        lost();


        ratioo = ((double)win / (double)total) * 100;
        cout << "Games won: " << win << endl;
        cout << "Games lost: " << lose << endl;
        cout << "Ratio: " << ratioo << "%" << endl;
    }
    return 0;
}

享受!我祝你学习C语!