1.5.9 獲取用戶輸入
另一種給變量賦值的方式可以通過(guò)用戶輸入來(lái)實(shí)現(xiàn)。所以接下來(lái),程序基于用戶輸入對(duì)新變量fuel賦值,如下面一行代碼所示:
cin >> fuel;
cin和cout一樣是iostream中定義的對(duì)象,且都屬于std名稱空間。在cin后面跟上>>(提取運(yùn)算符)和變量名可以將值存儲(chǔ)在變量中。也可以使用cin和提取運(yùn)算符將用戶輸入存儲(chǔ)在其他基本數(shù)據(jù)類型的變量中。為了證明一切都正常工作,程序?qū)uel顯示給用戶。
1.5.10 為類型定義新名稱
可以為已有類型定義新的名稱。實(shí)際上,下面這行代碼就是這么做的:
typedef unsigned short int ushort;
這段代碼將標(biāo)識(shí)符ushort定義為類型unsigned short int的另外一個(gè)名稱。重命名已有類型的方法如下:在typedef后面跟上當(dāng)前類型,再跟上新名稱。typedef通常用于給比較長(zhǎng)的類型名定義較短的新名稱。
新類型名的使用和原始類型一樣。程序初始化了一個(gè)名為bonus的ushort型變量(其實(shí)就是unsigned short int型變量),然后顯示它的值。
1.5.11 類型的選擇
對(duì)于基本數(shù)據(jù)類型,有很多種選擇。但如何知道選用哪種類型呢?如果需要整型,最好使用int。int占據(jù)的內(nèi)存空間能被計(jì)算機(jī)最有效地處理。如果需要表示的整數(shù)比int型最大值還要大或者只表示正數(shù),那么請(qǐng)使用unsigned int。
如果內(nèi)存資源較少,可以使用存儲(chǔ)空間較小的類型。然而,對(duì)于大多數(shù)計(jì)算機(jī)來(lái)說(shuō),不會(huì)出現(xiàn)內(nèi)存不夠的問(wèn)題(在游戲控制臺(tái)或移動(dòng)設(shè)備上編程則另當(dāng)別論)。
最后,如果需要使用浮點(diǎn)數(shù),最好使用float。float占據(jù)的空間也能被計(jì)算機(jī)最有效地處理。
1.6 使用變量進(jìn)行算術(shù)運(yùn)算
一旦有了存儲(chǔ)值的變量,我們就希望在游戲的過(guò)程中改變它們的值:也許希望通過(guò)對(duì)擊敗Boss的玩家加分給予獎(jiǎng)勵(lì),或許又希望降低氣閥里的氧氣含量。之前介紹的(和一些新的)運(yùn)算符可以完成這些任務(wù)。
1.6.1 Game Stats 2.0程序簡(jiǎn)介
Game Stats 2.0程序?qū)Ρ硎居螒蚪y(tǒng)計(jì)值的變量進(jìn)行操作并顯示結(jié)果。程序運(yùn)行結(jié)果如圖1-6所示。
從Course Technology網(wǎng)站(www.courseptr.com/downloads)或本書合作網(wǎng)站(http://www. tupwk.com.cn/downpage)上可以下載到該程序的代碼。程序位于Chapter 1文件夾中,文件名為game_stats2.cpp。
圖1-6 使用不同方式更改每個(gè)變量
// Game Stats 2.0
// Demonstrates arithmetic operations with variables
#include <iostream>
using namespace std;
int main()
{
unsigned int score = 5000;
cout << "score: " << score << endl;
//altering the value of a variable
score = score + 100;
cout << "score: " << score << endl;
//combined assignment operator
score += 100;
cout << "score: " << score << endl;
//increment operators
int lives = 3;
++lives;
cout << "lives: " << lives << endl;
lives = 3;
lives++;
cout << "lives: " << lives << endl;
lives = 3;
int bonus = ++lives * 10;
cout << "lives, bonus = " << lives << ", " << bonus << endl;
lives = 3;
bonus = lives++ * 10;
cout << "lives, bonus = " << lives << ", " << bonus << endl;
//integer wrap arround
score = 4294967295;
cout << "\nscore: " << score << endl;
++score;
cout << "score: " << score << endl;
return 0;
}
陷阱
當(dāng)編譯該程序時(shí),可能得到如“[Warning] this decimal constant is unsigned”這樣的警告。幸運(yùn)的是,警告不會(huì)阻止程序的編譯和運(yùn)行。該警告是整數(shù)溢出的結(jié)果。您也許希望在程序中避免整數(shù)溢出。然而,本程序有意使用了這種溢出并顯示這種情況的結(jié)果。1.6.5節(jié)在討論這段程序時(shí),將介紹關(guān)于整數(shù)溢出的知識(shí)。