1. 程式人生 > >7-1 2018final世界盃也瘋狂之球隊積分計算(20 分)

7-1 2018final世界盃也瘋狂之球隊積分計算(20 分)

這是一個世界盃賽場,有球隊類,其中,隊名、記錄每場比分的陣列、累計積分 是其三個私有資料成員;有兩個成員函式,分別是根據各場比分計算累計積分、以及計算淨勝球總和。請新增適當的建構函式。 積分計算規則是:勝者得三分,負者不得分,打平雙方各得一分。

輸入格式:

輸入僅一行,表示這個球隊資訊,分別是 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;
}