我正在努力学习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>
非常欢迎解释!
答案 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语!