# 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
的話就會破壞這個優化