版权声明:wywwzjj https://blog.csdn.net/weixin_42348709/article/details/81043928
这是一个世界杯赛场,有球队类,其中,队名、记录每场比分的数组、累计积分 是其三个私有数据成员;有两个成员函数,分别是根据各场比分计算累计积分、以及计算净胜球总和。请添加适当的构造函数。 积分计算规则是:胜者得三分,负者不得分,打平双方各得一分。
输入格式:
输入仅一行,表示这个球队信息,分别是 1或2(1表示该队是主队,2表示该队是客队)、若干场比分(主队进球数:客队进球数,场数小于20)。每项信息间以空格隔开。
输出格式:
输出一行,分别是该队的累计积分和净胜球数,两项信息间以空格隔开。
输入样例:
在这里给出一组输入。例如:
1 3:5 5:0 2:2 3:7
输出样例:
在这里给出相应的输出。例如:
4 -1
本题是我们的期末考试题,唯一的难点是输入数据的提取。
错误示例:
int main()
{
int ty;cin>>ty;int score = 0,win = 0;
int x,y;string s;
getline(cin,s);
int num = s.size()/4;
switch (ty)
{
case 1:
{
for(int i=1;i<s.size();i += 4)
{
x = s[i] - '0';
y = s[i+2] - '0';
if(x>y){score+=3;win++;}
if(x==y){score++;}
if(x<y){win--;}
}
cout<<score<<" "<<win;
break;
}
case 2:
{
for(int i=1;i<s.size();i += 4)
{
x = s[i] - '0';
y = s[i+2] - '0';
if(y>x){score+=3;win++;}
if(x==y){score++;}
if(y<x){win--;}
}
cout<<score<<" "<<win;
break;
}
}
return 0;
}
错因:误以为按回车结束输入,然而题目的意思是持续(文件)输入,读到停止标志才结束。
正确示例:
#include <iostream>
#include <string>
using namespace std;
int main()
{
int ty;cin>>ty;
int score = 0,win = 0;
char x,y,b;
while(cin>>x>>b>>y)//用while(scanf("%d:%d",&x,&y)!=EOF)可能更妥当一点
{
//cout<<"x="<<x<<" b="<<b<<" y="<<y<<endl;
if(ty==1)
{
if(x>y){score+=3;win++;}
else if(x==y){score++;}
else if(x<y){win--;}
}
if(ty==2)
{
if(y>x){score+=3;win++;}
else if(x==y){score++;}
else if(y<x){win--;}
}
//cout<<score<<" "<<win<<endl;
}
cout<<score<<" "<<win;
return 0;
}