#include

#include

#include

using namespace std;



#define BUF_SIZE 128


int main(void)

{ double score=0, sum=0;

int count = 0;

char buf[BUF_SIZE];


do

{ cout << "請輸入成績:";

cin.getline(buf, BUF_SIZE);


if (buf[0] == 'q' && buf[1] == '\0' || strcmp(buf, "quit")==0)

break;

score = atof(buf);


if (score>=0. && 100.>=score && isdigit(buf[0]))

{ ++count; sum += score; }

} while (score != -1.);



if (count)

printf("%.2f\n", sum/count);



system("pause");


return 0;

}


說明:

大小不限、

可以直接比較兩 string 是否一樣。

但它的缺點太多,所以不建議使用!

因此我用了char 陣列。



char 陣列比較是否相同,要用 strcmp

如果要不管大小寫,用 stricmp

當然,那個 buf[0] == 'q' 也要改成 tolower(buf[0]) == 'q'

在 C,能直接 == 的,只有 primitive type (就是 char, short, int, float, double等)!

在C++,除了上述外,程式可以自己寫 operator overload。

1. include 是插入那個檔案到這個位置。
主要是用來引用別人(含compiler)幫你做好的宣告。
因此,compiler知道你要用的東西長什麼樣子;
不同的程式之間,可以有致的用法。

2.#define BUF_SIZE 128 是定義 BUF_SIZE 這個字為128,
以後,compiler看到這個字,就會幫你換成 128。
因此,萬一你要改成256或其它數值,
只要改一處,就全都改到了。
而且,將來看到這個程式,
不會想不起來:128是怎麼來的?
不會不知道要改哪些地方!
(可能有別的值也剛好是128!所以,不能用搜尋→置換!)
2010-04-17 18:54:07 補充
3. 同2.。這時BUF_SIZE 已被換成128。

4.cin只抓一個值。字串間有空白的話,會被視為二個字串!
 getline(buf, BUF_SIZE);則會整列讀進來。
 BUF_SIZE 這個字很清楚地告訴我們:那裡是暫存區的大小。
 多大? 2. 告訴我們:128
 也就是說:使用者輸入127字以內,都不會出問題。
 第128字起,會不見!

5. strcmp 是標準函式,宣告在string.h裡。
 我竟然漏 include了!
 少數compiler會自動幫你 include 有的沒的!
 其實這不好!
 如果裡面的兩串字一樣,會傳回0;
 如果不同,前大傳回正,小則負。

程式分享原網址:http://tw.knowledge.yahoo.com/question/question?qid=1510041608965
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 hfnkiki 的頭像
    hfnkiki

    我要勇敢地追逐我的世界.我的夢...

    hfnkiki 發表在 痞客邦 留言(0) 人氣()