0%

0-2 基本輸入輸出

可能不太好看懂的教學

輸入

在以下的程式碼中,宣告了整數a、字元b、浮點數c、與字串d。
並將其讀入。

1
2
3
4
5
int a;
char b;
double c;
string d;
cin>>a>>b>>c>>d;

cin的語法很特殊,總之像上面那樣,注意不要打成<<,也不要在中間加入無用空格,像這樣:

1
2
3
//錯誤示範
cin>>a>>" ">>'\n'>>b;
cin<<a;

當然,不一定要將輸入的東西全部擠成一行,可以寫作如下形式,效果相同:

1
2
3
4
cin>>a;
cin>>b;
cin>>c;
cin>>d;

如果輸入了不合法的東西,程式會有不正常的反應,如:

1
2
int x;
cin>>x;

這時,若輸入abc,由於abc並非整數,因此x將不會讀入任何值。

輸出

1
2
3
4
5
6
int a;
char b;
double c;
string d;
cin>>a>>b>>c>>d;
cout<<a<<b<<c<<d;

跟cin語法基本相同,但箭頭相反方向。

注意事項

若用上方程式碼輸入這行,得到的輸出會是什麼呢?

1
45 a 5.25 sfdljkg

答案是:

1
45a5.25sfdljkg

壞掉了嗎?並沒有,那為什麼空白不見了?

原因是cin會自動忽略所有不可見字元,包含空格以及換行字元。

因此,只要確實分離,不論輸入是這樣:

1
45 a 5.25 sfdljkg

這樣:

1
45      a   5.25  sfdljkg

還是這樣:

1
2
3
45  a
5.25
sfdljkg

程式都能夠正確讀取!

cin如何運作

1
2
int x;
cin>>x;

若我輸入123abc,程式運行結果會是如何?

答案是:

1
123

因此,cin一個整數時,程式會一直讀取直到下一個位置的字元不是數字為止!

因此,若上方的輸入為:

1
45a5.25sfdljkg

首先,整數讀入45後停止,字元讀入一個字元’a’後停止,浮點數讀入5.25後停止,字串讀入至行尾停止。

因此,在這個範例裡,輸出結果跟原來一模一樣!

1
45a5.25sfdljkg

那 怎麼輸出空格?

輸出一個空白字元,或者一個含一個空白的字串,接著將其輸出!

1
2
3
4
int a = 10;
char space = ' ';
int b = 12;
cout<<a<<space<<b<<'\n';
1
10 12

這麼麻煩嗎?

其實,輸出的東西,不一定要是變數!

1
cout<<10<<' '<<12<<"hello!"<<'\n';
1
10 12 hello!

對比:cin的輸入對象一定要是變數,不然你輸入進來要存在哪裡?

因此,若要以空格分隔上方輸出,上方程式碼可改寫為:

1
2
3
4
5
6
int a;
char b;
double c;
string d;
cin>>a>>b>>c>>d;
cout<<a<<" "<<b<<" "<<c<<" "<<d<<'\n';

練習

TOJ 92

TOJ 519

TOJ 520

再次提醒,行尾要輸出換行字元’\n’!

AC Code

1
2
3
4
5
6
7
8
9
10
// TOJ 92
#include<iostream>
using namespace std;
string a,b,c;

int main(){
string a, b, c;
cin>>a>>b>>c;
cout<<"Hello, "<<a<<", "<<b<<", and "<<c<<"!\n";
}
1
2
3
4
5
6
7
8
9
// TOJ 519
#include <iostream>
using namespace std;
int a, b;

int main(){
cin>>a>>b;
cout << "Do you want to say " << a <<" and " << b <<" ??\n";
}
1
2
3
4
5
6
7
8
9
// TOJ 520
#include <iostream>
using namespace std;
int a,b;

int main() {
cin>>a>>b;
cout<<b<<" "<<a<<"\n";
}

備註

有另外一種輸入輸出方法:scanf / printf,與cin/cout功能相同,若有興趣可自行查詢相關資源。