# Hello world!
#include <iostream>
using namespace std;
int main()
{
cout << "Hello world!" << endl;
return 0;
}
大家一定都看過以上程式,通常這也是編譯器(compiler)預設的程式
接下來,就要看看它是怎麼運作的
# cin 與 cout
首先,我們需要include標頭檔iostream #include <iostream>
原因是cin及cout並非C++本身定義的函式(function),如果要用到cin或cout就需要include iostream
接下來,我們要寫 using namespace std;這一行
它的意思是我們使用iostream,也就是C++函式庫中的函式
如果沒有加這一行,那之後用到cin、cout或其他函式的時候,都需要在前面加 std::
例如: std::cin >> a; std::cout << a;
int main()
{
return 0;
}
這邊照寫就好,是程式的框架,程式會從main函式開始執行
記得每行程式的結尾都要加上;結尾符號
cin的標準格式為: std::cin >> 變數a >> 變數b; 以空格隔開不同輸入
cout的標準格式為: std::cout << 變數或敘述a << 變數或敘述b;
變數可為不同的資料型態,例如:
int a; // 整數
double b; // 小數
string c; // 字串
cin >> a >> b >> c; //輸入0 2.5 xyz
cout << "a:" << a << " b:" << b << " c:" << c;
輸出為: a:0 b:2.5 c:xyz
""雙引號內可打任何的文字,會直接印出
(關於各種資料型態,會在下一篇詳細介紹)
為什麼上面cout要寫變數或敘述a呢?那是因為cout裡面也可以放運算式
int a = 1;
int b = 2;
cout << a + b << " " << a - b << " " << a * b << " " a / b; // 分別為加減乘除
輸出為: 3 -1 2 0 (整數除法為無條件捨去)
另外,cout及cin也可以寫成多行格式,例如:
int a, b;
cin >> a
>> b;
cout << a
<< b;
一般可能看起來很奇怪,但是在需要大量輸入輸出時,可以讓程式碼更加易懂
cout中的換行有兩種寫法
cout << "\n";或cout << '\n';cout << endl;
兩種寫法達成的效果是一樣的
如果要換多行,則增加\n或endl的數量即可
例如: 換三行
cout << "\n\n\n";cout << endl << endl << endl;
# scanf 與 printf
scanf與printf則需要include標頭檔stdio.h #include <stdio.h>
scanf的標準格式為: scanf("變數型態", &變數a);
printf的標準格式為: printf("變數型態", 變數或敘述a);
scanf 與 printf的變數型態必須正確,不然可能會造成錯誤輸出
int a = 0;
float b = 2.5;
char c = 'y';
printf("%d %f %c\n", a, b, c);
scanf("%d %f %c", &a, &b, &c); // 輸入 5 23.56 p
printf("%d %f %c", a, b, c);
輸出為:
0 2.5 y
5 23.56 p
可以發現輸入到變數a b c的值會直接覆蓋原本的值
使用scanf的時候,變數前須加上&符號
%d為整數
%f為浮點數(小數)
%c為字元
(同樣會在下一章中詳細介紹)
printf同樣也能放運算式
int a = 3;
int b = 4;
printf("%d %d %d %d", a + b, a - b, a * b, a / b);
輸出為: 7 -1 12 0
另外,printf中換行只能使用\n
相較於cin與cout,scanf與printf的執行速度比較快
# cin cout 速度優化
前面提到,一般情況下cin及cout的速度會比scanf及printf慢
原因是cin及cout會與stdio中的input及output同步,而且cin及cout都會先進到緩衝區
以下的程式能取消與stdio的同步,並強迫清空緩衝區
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
輸入以上程式後,換行就只能用\n,使用endl的話就會破壞這個優化