目錄
- 前言
- 1.getchar和 putchar
- 1.1 getchar()
- 1.2 putchar()
- 2.scanf和 printf
- 2.1 printf
- 2.1.1基本用法
- 2.1.2占位符
- 2.1.3格式化輸出
- 2.1.3.1 限定寬度
- 2.1.3.2 限定小數位數
- 2.2 scanf
- 2.2.1基本用法
- 2.2.2 占位符
- 2.2.3 scanf的返回值
- 2.3練習
- 練習1:浮點除法
- 練習2:甲流疫情死亡率
- 練習3:溫度表達轉化
- 練習4:計算并聯電阻的阻值
- 練習5:與圓相關的計算
- 練習6:對齊輸出
- 練習7:糖果游戲
- 3.cin和 cout
- 3.1基本用法
- 3.2 連續輸入輸出
- 3.3 cout的格式輸出(加餐)
- 3.3.1 控制寬度和填充(加餐)
- 3.3.2 控制數值格式 (加餐)
- 3.3.3 控制整數格式(加餐)
- 3.3.4 控制對齊方式(加餐)
- 3.4 練習
- 練習1:數字反轉
- 練習2:三?形?積
- 總結
前言
編程的世界里,輸入與輸出是程序與用戶交互的橋梁。無論是簡單的數據處理,還是復雜的算法實現,輸入輸出始終是不可或缺的環節。本章將深入探討C/C++語言中輸入輸出的多種方式,從基礎的getchar和putchar函數,到功能強大的scanf和printf,再到C++特有的cin和cout流對象,我們將逐步剖析它們的使用方法、特點以及適用場景。
正文開始
1.getchar和 putchar
getchar()getchar()和 putchar() 是屬于C語言的庫函數,C++是兼容C語言的,所以C++中只要正確包含頭文件也可以正常使用這兩個函數。
1.1 getchar()
函數原型如下:
int getchar ( void);
**getchar()**函數返回用戶從鍵盤輸入的一個字符,使用時不帶有任何參數。
程序運行到這個命令就會暫停,等待用戶從鍵盤輸入,等同于使用cin或scanf() 方法讀取一個字符。
它的原型定義在頭文件<cstdio>。
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{int ch;ch = getchar();cout << ch << endl;cout << (char)ch << endl;return 0;
}
getchar()不會忽略起首的空白字符,總是返回當前讀取的第一個字符,無論是否為空格。
換行算不算字符呢?答案是肯定的;
我們來看下面的代碼:
#include <iostream>
using namespace std;
int main()
{int ch = getchar();cout << (char)ch << endl;cout << ch << endl;ch = getchar();cout << (char)ch;cout << ch << endl;cout << "xxxxx" << endl;return 0;
}
運行結果:
上面的代碼我們輸入了一個a回車,getchar先讀取一個字符a打印a和其的ASCII碼值97,再讀取換行,打印換行,和其ASCII碼值10;
如果讀取失敗,返回常量EOF,由于EOF通常是-1,所以返回值的類型要設為int,而不是char。
如何讓getchar()函數讀取失敗,返回-1呢?其實需要在輸入字符之前,直接按Ctrl+z就可以。
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{int ch;ch = getchar();cout << ch << endl;return 0;
}
getchar() 通常和 putchar() 是一對兒,配合使用的。
1.2 putchar()
函數原型如下:
int putchar( int character );
putchar()函數將它的參數字符輸出到屏幕,它的原型定義在頭文件<cstdio>。
#include <cstdio>
int main()
{int ch = 0;ch = getchar();putchar(ch);return 0;
}
操作成功時, putchar()返回輸出的字符,否則返回常量 EOF。
小提示:
當用到快速讀寫,就會用到這兩個函數。
2.scanf和 printf
scanf() 和 printf()是屬于C語言的庫函數,C++是兼容C語言的,所以C++中只要正確包含頭文件也可以正常使用這兩個函數。而且這兩個函數在算法競賽題目中使用的非常頻繁,尤其是在輸出格式控制中,所以接下來我們這里認真學習一下。
對printf和scanf有更深入的了解可以看看小編的這篇文章:
C語言的 printf 與 scanf
2.1 printf
printf() 函數原型如下:
int printf ( const char * format, ... );
2.1.1基本用法
printf()的作用是將參數文本輸出到屏幕。
它名字里面的f代表format(格式化),表示可以定制輸出文本的格式。
#include <cstdio>
int main()
{printf("Hello World");return 0;
}
上面命令會在屏幕上輸出一行文字“Hello World”。
printf() 不會在行尾自動添加換行符,運行結束后,光標就停留在輸出結束的地方,不會自動換行。
為了讓光標移到下一行的開頭,可以在輸出文本的結尾,添加一個換行符\n。
#include <cstdio>
int main()
{printf("Hello World\n");return 0;
}
如果文本內部有換行,也是通過插入換行符來實現,如下方代碼:
#include <cstdio>
int main()
{printf("Hello\nWorld");return 0;
}
2.1.2占位符
printf() 可以在輸出文本中指定占位符。
所謂“占位符”,就是這個位置可以用其他值代入。
#include <cstdio>
// 輸出 There are 3 apples
int main()
{printf("There are %d apples\n", 3);return 0;
}
上面示例中,There are %d apples\n是輸出文本,里面的%d就是占位符,表示這個位置要用其他值來替換。占位符的第一個字符一律為百分號%,第二個字符表示占位符的類型,%d表示這里代入的值必須是一個整數。
printf() 的第二個參數就是替換占位符的值,上面的例子是整數3替換%d。執行后的輸出結果就是 There are 3 apples。
常用的占位符除了%d,還有%s表示代入的是字符串。
#include <cstdio>
int main()
{printf("%s will come tonight\n", "zhangsan");return 0;
}
上面示例中,%s表示代入的是一個字符串,所以printf() 的第二個參數就必須是字符串,這個例子是zhangsan。執行后的輸出就是zhangsan will come tonight。
輸出文本里面可以使用多個占位符。
#include <cstdio>
int main()
{printf("%s says it is %d o'clock\n", "lisi", 21);return 0;
}
上面示例中,輸出文本%s says it is %d o'clock 有兩個占位符,第一個是字符串占位符%s,第二個是整數占位符%d,分別對應printf()的第二個參數(lisi)和第三個參數(21)。執行后的輸出就是lisi says it is 21 o'clock。
printf()參數與占位符是一一對應關系,如果有n個占位符,printf()的參數就應該有n+1個。如果參數個數少于對應的占位符,printf() 可能會輸出內存中的任意值。
占位符列舉:
printf() 的占位符有許多種類,與數據類型相對應。
下面列出常用的占位符,方便查找,具體含義在后面章節介紹。
占位符 | 介紹 |
%d | 十進制整數。 |
%lld | 十進制long long int類型。 |
%f | 小數(包含float類型和double類型)。 |
%Lf | long double 類型浮點數。 |
%c | 字符。 |
%S | 字符串。 |
%a | 十六進制浮點數,字母輸出為小寫。 |
%A | 十六進制浮點數,字母輸出為大寫。 |
%e | 使用科學計數法的浮點數,指數部分的e為小寫。 |
%E | 使用科學計數法的浮點數,指數部分的E為大寫。 |
%i | 整數,基本等同于%d。 |
%g | 6個有效數字的浮點數。整數部分一旦超過6位,就會自動轉為科學計數法,指數部分的e 為小寫。 |
%G | 等同于%g,唯一的區別是指數部分的E為大寫。 |
%hd | 十進制short int類型。 |
%ho | 八進制short int類型。 |
%hx | 十六進制short int類型。 |
%hu | unsigned short int類型。 |
%ld | 十進制 long int類型。 |
%lo | 八進制long int類型。 |
%lx | 十六進制long int類型。 |
%lu | unsigned long int 類型。 |
%llo | 八進制long long int類型。 |
%llx | 十六進制 long long int類型。 |
%llu | unsigned long long int 類型。 |
%Le | 科學計數法表示的long double類型浮點數。 |
%n | 已輸出的字符串數量。該占位符本身不輸出,只將值存儲在指定變量之中。 |
‰ | 八進制整數。 |
%p | 指針。 |
%u | 無符號整數(unsigned int)。 |
%x | 十六進制整數。 |
%zd | size_t類型。 |
%% | 輸出一個百分號。 |
2.1.3格式化輸出
printf() 可以定制占位符的輸出格式。
2.1.3.1 限定寬度
printf()允許限定占位符的最小寬度。
#include <cstdio>
int main()
{printf("%5d\n", 123); // 輸出為 " 123"return 0;
}
上面示例中,%5d表示這個占位符的寬度至少為5位。如果不滿5位,對應的值的前面會添加空格。輸出的值默認是右對齊,即輸出內容前面會有空格;
如果希望改成左對齊,在輸出內容后面添加空格,可以在占位符的%的后面插入一個’-'號。
int main()
{printf("%-5d\n", 123); // 輸出為 " 123"return 0;
}
上面示例中,輸出內容123的后面添加了空格。
對于小數,這個限定符會限制所有數字的最小顯示寬度。
#include <cstdio>
// 輸出 " 123.450000"
int main()
{printf("%12f\n", 123.45);return 0;
}
上面示例中,%12f表示輸出的浮點數最少要占據12位。由于小數的默認顯示精度是小數點后6位,所以123.45輸出結果的頭部會添加2個空格。
2.1.3.2 限定小數位數
輸出小數時,有時希望限定小數的位數。舉例來說,希望小數點后面只保留兩位,占位符可以寫成%.2f。
#include <cstdio>
// 輸出 Number is 0.50
int main()
{printf("Number is %.2f\n", 0.5);return 0;}
上面示例中,如果希望小數點后面輸出3位(0.500),占位符就要寫成%.3f。
這種寫法可以與限定寬度占位符,結合使用。
// 輸出為 " 0.50"
int main()
{printf("%6.2f\n", 0.5);return 0;
}
上面示例中,%6.2f表示輸出字符串最小寬度為6,小數位數為2。所以,輸出字符串的頭部有兩個空格。
最小寬度和小數位數這兩個限定值,都可以用*代替,通過printf() 的參數傳入。
#include <cstdio>
int main()
{printf("%*.*f\n", 6, 2, 0.5);return 0;
}
// 等同于printf("%6.2f\n", 0.5);
上面示例中, %★.★f的兩個星號通過printf() 的兩個參數6和2傳入。
2.2 scanf
scanf() 函數原型如下:
int scanf ( const char * format,...);
2.2.1基本用法
scanf() 函數用于讀取用戶的鍵盤輸入。
程序運行到scanf() 這個語句時,會停下來,等待用戶從鍵盤輸入。
用戶輸入數據、按下回車鍵后,scanf() 就會處理用戶的輸入,將其存入變量。
scanf()的語法跟printf() 類似。
請看下面的代碼:
#include <cstdio>
int main()
{int i = 0;scanf("%d", &i);printf("%d\n", i);return 0;
}
小提示:
特別注意,scanf函數的占位符后面一般不會加\n,\n是換行,一般在輸出的時候才使用
它的第一個參數是一個格式字符串,里面會放置占位符(與printf()的占位符基本一致),告訴編譯器如何解讀用戶的輸入,需要提取的數據是什么類型。這是因為C語言的數據都是有類型的,scanf() 必須提前知道用戶輸入的數據類型,才能處理數據。
它的其余參數就是存放用戶輸入的變量,格式字符串里面有多少個占位符,就有多少個變量。
上面示例中,scanf()的第一個參數%d,表示用戶輸入的應該是一個整數。%d就是一個占位符,%是占位符的標志,d表示整數。第二個參數&i表示,將用戶從鍵盤輸入的整數存入變量i。
小提示:
scanf函數中存儲數據的變量前面必須加上&運算符(指針變量除外),因為scanf()需要的是地址,必須將變量i的地址取出來傳給scanf函數。
如果這里的變量i是數組,那就不用加&運算符。(后期慢慢介紹)
下面是一次從鍵盤讀取多個變量的例子:
先來一個簡單的:
#include <cstdio>
int main()
{int a, b, c, d;scanf("%d%d%d%d", &a, &b, &c, &d);printf("%d %d %d %d\n", a, b, c, d);return 0;
}
小提示:
scanf 函數中指定的格式和給程序輸入的數據格式要嚴格的匹配,否則可能不能得到想要的值。
再換一個例子:
#include <cstdio>
int main()
{int i = 0;int j = 0;float x = 0;float y = 0;scanf("%d%d%f%f", &i, &j, &x, &y);printf("i = %d\n", i);printf("j = %d\n", j);printf("x = %f\n", x);printf("y = %f\n", y);return 0;
}
上面示例中,格式字符串%d%d%f%f,表示用戶輸入的前兩個是整數,后兩個是浮點數。
比如鍵盤輸入1-20 3.4-4.0e3,這四個值依次放入i、j、x、y四個變量。
scanf()處理數值占位符時,會自動過濾空白字符,包括空格、制表符、換行符等。
所以,用戶輸入的數據之間,有一個或多個空格不影響scanf()解讀數據。另外,用戶使用回車鍵,將輸入分成幾行,也不影響解讀。
1
-20
3.4
-4.0e3
上面示例中,用戶分成四行輸入,得到的結果與一行輸入是完全一樣的。每次按下回車鍵以后,scanf()就會開始解讀,如果第一行匹配第一個占位符,那么下次按下回車鍵時,就會從第二個占位符開始解讀。
scanf() 處理用戶輸入的原理是:
用戶的輸入先放入緩存,等到按下回車鍵后,按照占位符對緩存進行解讀。解讀用戶輸入時,會從上一次解讀遺留的第一個字符開始,直到讀完緩存,或者遇到第一個不符合條件的字符為止。
#include <cstdio>
int main()
{int x = 0;float y = 0;// 用戶輸入 " -13.45e12# 0"scanf("%d", &x);printf("%d\n", x);scanf("%f", &y);printf("%f\n", y);return 0;
}
上面示例中,scanf() 讀取用戶輸入時,%d占位符會忽略起首的空格,從-處開始獲取數據,讀取到-13停下來,因為后面的.不屬于整數的有效字符。這就是說,占位符%d會讀到-13。
第二次調用scanf() 時,就會從上一次停止解讀的地方,繼續往下讀取。這一次讀取的首字符是.,由于對應的占位符是%f,會讀取到.45e12,這是采用科學計數法的浮點數格式。后面的#不屬于浮點數的有效字符,所以會停在這里。
由于scanf() 可以連續處理多個占位符,所以上面的例子也可以寫成下面這樣。
#include <stdio.h>
int main()
{int x = 0;float y = 0;// ??輸? " -13.45e12# 0"scanf("%d%f", &x, &y);printf("%d %f\n", x, y);return 0;
}
2.2.2 占位符
scanf() 常用的占位符如下,與 printf()的占位符基本一致。
占位符 | 介紹 |
%c | 字符。 |
%d | 整數。 |
%f | float類型浮點數。 |
%lf | double類型浮點數。 |
%Lf | long double類型浮點數。 |
%s | 字符串。 |
%[] | 在方括號中指定一組匹配的字符(比如%[0-9]),遇到不在集合之中的字符,匹配將會停止。 |
上面所有占位符之中,除了%c以外,都會自動忽略起首的空白字符。%c不忽略空白字符,總是返回當前第一個字符,無論該字符是否為空格。
如果要強制跳過字符前的空白字符,可以寫成scanf(" %c", &ch) ,即%c前加上一個空格,表示跳過零個或多個空白字符。
#include <cstdio>
int main()
{char ch = 0;scanf("%c", &ch);printf("--%c--\n", ch);return 0;
}
結果演示:
為了避免在讀取這些空?字符,可以換?種?式:
#include <cstdio>
int main()
{char ch = 0;scanf(" %c", &ch);//%c前的空格會讓scanf強制跳過空白字符,去讀取非空白字符printf("--%c--\n", ch);return 0;
}
結果演?:
了解這一點后,當‰c和%d等占位符連續使用的時候,也要注意,%c默認不會跳過空白字符的,所以在輸入的時候,要非常小心,比如:
#include <cstdio>
int main()
{ int a;char ch;scanf("%d%c", &a, &ch);printf("%d %c\n", a, ch);return 0;
}
如果在輸入的時候,就是想在整數和字符之間加上空格,那么scanf中的格式串中%c的前面就要加上空格。
#include <cstdio>
int main()
{ int a;char ch;scanf("%d %c", &a, &ch);printf("%d %c\n", a, ch);return 0;
}
正確的輸入:
總之要注意,scanf中規定的輸入格式和控制臺輸入數據的格式要保持一致才可能得到正確的結果。
2.2.3 scanf的返回值
scanf() 的返回值是一個整數,表示成功讀取的變量個數。
如果沒有讀取任何項,或者匹配失敗,則返回0。如果在成功讀取任何數據之前,發生了讀取錯誤或者遇到讀取到文件結尾,則返回常量EOF(-1)。
#include <cstdio>
int main()
{int a = 0;int b = 0;float f = 0.0f;int r = scanf("%d %d %f", &a, &b, &f);printf("a=%d b=%d f=%f\n", a, b, f);printf("r = %d\n", r);return 0;
}
輸入輸出測試:
如果輸?2個數后,按 ctrl+z ,提前結束輸?:
在Dev-C++中按下ctrl+z,才結束了輸入,我們可以看到r是2,表示正確讀取了2個數值。
如果輸入的數據一個都不能匹配成功的話,則輸出的r是0.
如果一個數字都不輸入,直接按ctrl+z ,輸出的r是-1,也就是EOF.
掌握了scanf的返回值,我們一般會通過scanf的返回值來處理多組數據輸入的競賽題目,在后期的課程中大家都會一一見到的。
2.3練習
練習1:浮點除法
#include <iostream>
using namespace std;
int main()
{int a,b;cin >> a >> b;float c = (float)a/b;printf("%.3f",c);return 0;
}
練習2:甲流疫情死亡率
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{int a,b;cin >> a >> b;float c = b*1.0/a*100.0;printf("%.3f%%", c);return 0;
}
小提示:
1.百分號%可以這樣輸出:printf("%%");
2.注意a和b的取值范圍
3.百分比不是直接b/a,是需要乘以100.0的,因為需要得到小數,所以要是小數除法
4.有時候:先乘100再除a,還是先除a再乘100是有差異的。
比如:4/8*100和4*100/8的結果就有差異的。
練習3:溫度表達轉化
#include <cstdio>
int main()
{double f = 0;scanf("%lf", &f);double c = 5 * (f - 32) / 9.0;printf("%.5lf\n", c);return 0;
}
練習4:計算并聯電阻的阻值
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{double r1,r2;cin >> r1 >> r2;printf("%.2lf", 1/((1/r1)+(1/r2)));return 0;
}
練習5:與圓相關的計算
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{double r = 0;double p = 3.14159;cin >> r;printf("%.4lf %.4lf %.4lf",2*r,2*p*r,r*r*p);return 0;
}
練習6:對齊輸出
#include <iostream>
using namespace std;
#include <cstdio>
int main()
{int a, b, c;cin >> a >> b >> c;printf("%8d %8d %8d",a,b,c);return 0;
}
練習7:糖果游戲
#include <iostream>
using namespace std;
#include <cstdio>
int main()
{int a, b, c, d, e;cin >> a >> b >> c >> d >> e;//1號a /= 3;b += a;e += a;//2號b /= 3;c += b;a += b;//3號c /= 3;b += c;d += c;//4號d /= 3;c += d;e += d;//5號e /= 3;d += e;a += e;printf("%5d%5d%5d%5d%5d\n", a, b, c, d, e);return 0;}
3.cin和 cout
前面我們已經提到過在C++中提供了:cin和cout兩個流對象。
cin是C++中提供的標準輸入流對象,一般針對的是鍵盤,也就是從鍵盤上輸入的字符流,使用cin來進行數據的提取,cin一般是和>>(流提取運算符)配合使用的。cin的功能和scanf 是類似的。
cout是C++中提供的標準輸出流對象,一般針對的控制臺的窗口,也就是將數據以字符流的形式輸出到控制臺窗口上顯示。cout 一般是和<<(流插入運算符)配合使用。cout的功能和printf|是類似的。
我們在寫程序的時候,經常需要處理數據,不管什么類型的數據都是以字符流的形式輸入和輸出的,也就是不管在鍵盤上輸入什么類型的數據,還是將程序中的各種類型的數據輸出顯示到控制臺屏幕上,都是以字符流的形式處理的。
cin和cout的輸入輸出非常的方便,不需要手動控制格式,能夠自動識別變量類型。
3.1基本用法
#include <iostream>
using namespace std;
int main()
{int a;char c;float f;cin >> a; // 讀取?個整數cin >> c; // 讀取?個字符cin >> f; // 讀取取?個浮點數cout << "打印結果:"<<endl;cout << a << endl;cout << c << endl;cout << f << endl;return 0;
}
當我們在鍵盤輸入數據的時候,輸入的數據不能被cin解讀為對應類型的數據,那么讀取也就結束了。
比如:
cin 使用細節:
cin 在讀取的時候是根據用戶的輸入,從前往后,從上往下依次掃描。
cin在讀取的過程中遇到空格,自動會跳過,所以不要擔心在想要的字符前輸入空白字符。
當一行讀取結束的時候,會自動換行,讀取下一行的內容。
cin后面不可以跟換行endl
3.2 連續輸入輸出
如果我們一次要輸入/輸出多個數據,那cin和cout能做到嗎?可以!
在上面的代碼中,使用cout 進行變量的輸出,實質上是將變量插入到cout 對象里,并以cout 對象作為返回值返回,因此我們還可以用<<在后面連續輸出多個內容,通過連續輸入輸出的方式對代碼進行編寫,效果如下:
cin舉例:
#include <iostream>
using namespace std;
int main()
{int a = 0;int b = 0;//同類型變量連續輸?cin >> a >> b; //以最后?次輸?為準//添加換?endlcin >> a >> endl; //代碼編譯報錯return 0;
}
#include <iostream>
using namespace std;
int main()
{//不同類型變量的連續輸?int a = 0;char ch = 0;float f = 0;cin >> a >> ch >> f;return 0;
}
cout舉例:
#include <iostream>
using namespace std;
int main()
{//對同?類型變量連續輸出int a = 10;int b = 20cout << a << " " << b << endl;return 0;
}
#include <iostream>
using namespace std;
int main()
{//?持相同/不同類型變量的連續輸?char ch = 0;float f = 0.1;cout << ch << f << endl;//格式化輸出:添加(任意)空格和字符串cout << "ch:" << ch << " f:" << f << endl;//格式化輸出:多次換?cout << ch << endl << endl;return 0;
}
cin 的好處:
當輸入若干個變量(也就是數據量很少)的時候,我們就可以通過>>把所有的數據用一行代碼完成接收,而且無需關心數據的類型,和scanf函數比起來代碼的書寫非常簡潔明了。
cout的好處:
cout 也可以用來連續輸出多個數值,而且無需考慮數值的類型,因為它本身會做類型處理,和printf比起來比較方便。
3.3 cout的格式輸出(加餐)
printf 函數在輸出數據的時候,可以指定格式來輸出,比如:指定寬度,比如指定小數點后的位數,對齊方式等等。那么cout 在數據的時候能否指定格式呢?答案是可以的!cout 結合<iomanip>(I0 manipulators)頭文件中的操縱符,可以靈活控制輸出格式,從而滿足各種格式化需求。
3.3.1 控制寬度和填充(加餐)
-
setw:設置字段寬度(只對緊接著的輸出項有效)。
-
setfill:設置填充字符。
#include <iostream>
using namespace std;
#include <iomanip>
int main()
{int a = 123;cout << "默認寬度: " << a << endl;cout << "寬度設置為10: " << setw(10) << a << endl;cout << "寬度為10,不夠時填充*: " << setw(10) << setfill('*') << a << endl;return 0;
}
結果演示:
3.3.2 控制數值格式 (加餐)
- fixed :以固定?數點表?浮點數,設置后就不會以科學計數法展示了。
- scientific :以科學計數法表?浮點數。
- setprecision :設置浮點數的精度,以控制?數點后的數字位數,?般先固定?數點,再設置精度。
#include <iomanip>
int main()
{float a = 12.349584521314;cout << "默認:" << a << endl;cout << "固定小數點方式: " <<fixed << a << endl;cout << "科學計數法方式: " << scientific << a << endl;cout << "固定小數點,小數點后2位有效數字: " << fixed << setprecision(2) << a << endl;return 0;
}
3.3.3 控制整數格式(加餐)
- dec :以?進制格式顯示整數(默認)。
- hex :以?六進制格式顯示整數。
- oct :以?進制格式顯示整數。
#include <iostream>
using namespace std;
#include <iomanip>
int main() {int n = 255;cout << "十進制 : " << dec << n << endl;cout << "十六進制: " << hex << n << endl;cout << "十進制 : " << oct << n << endl;return 0;
}
3.3.4 控制對齊方式(加餐)
- left :左對?。
- right :右對?(默認)。
#include <iostream>
using namespace std;
#include <iomanip>
int main()
{int n = 123;cout << "右對齊: " << setw(10) << right << n << endl;cout << "左對齊: " << setw(10) << left << n << endl;return 0;
}
3.4 練習
練習1:數字反轉
#include <iostream>
using namespace std;
#include <cstdio>
int main()
{char a,b,c,d,e;cin >> a >> b >> c >> d >> e;cout << e << d << c << b << a << endl;return 0;
}
?提?:
從題?的中可以看出,想要輸??數,然后反轉輸出,如果真按照這樣的思路往下?,也能解決問題,但是可能就復雜了。其實在不管什么類型的數據都是以字符流的形式輸?和輸出的,那我們就可以把輸?的這個?數和?數點,都當做字符依次讀取,然后再按照想要的順 序輸出就?。
如果使? scanf 和 printf函數要指定好占位符,如果使? cin/cout 要指定好變量的類型;
練習2:三?形?積
#include <iostream>
using namespace std;
#include <cstdio>
#include <cmath>
#include <iomanip>
int main()
{double a, b, c;cin >> a >> b >> c;double p = (a + b + c)/2;double s = sqrt(p*(p - a)*(p - b)*(p - c));cout << fixed << setprecision(1) << s << endl;return 0;
}
總結
本章對C/C++中的輸入輸出進行了全面而深入的講解。從基礎的字符輸入輸出函數getchar和putchar,到功能強大的格式化輸入輸出函數scanf和printf,再到C++中靈活的流對象cin和cout,我們不僅學習了它們的使用方法,還通過大量實例展示了如何在實際編程中靈活運用這些工具。