輸入輸出
控制臺(tái)(console)是電腦的最基本交互接口,通常包括鍵盤(pán)(keyboard)和屏幕(screen)自晰。鍵盤(pán)通常為標(biāo)準(zhǔn)輸入設(shè)備,而 屏幕為標(biāo)準(zhǔn)輸出設(shè)備。
而在程序的編寫(xiě)或是學(xué)習(xí)中必然要涉及到屏幕上顯示輸出并從鍵盤(pán)接收用戶的輸入過(guò)程褐鸥,本節(jié)將重點(diǎn)學(xué)習(xí)如何在控制臺(tái)下編寫(xiě)輸入輸出。?????
控制臺(tái)打開(kāi)方式:
1赐稽、開(kāi)始叫榕,運(yùn)行,鍵入cmd 姊舵,回車
2晰绎、快捷鍵:Win + R , 鍵入cmd 括丁, 回車
C++沒(méi)有輸入輸出語(yǔ)句荞下,C++通過(guò)標(biāo)準(zhǔn)類庫(kù)來(lái)擴(kuò)展語(yǔ)言功能,例如利用輸入輸出類庫(kù)來(lái)擴(kuò)展語(yǔ)言的輸入輸出功能史飞。
標(biāo)準(zhǔn)庫(kù)中定義了大量輸入輸出類
①輸入輸出流類iostream的定義在iostream.h中
②文件流類fstream的定義在fstream.h中 file
③格式化輸入輸出流類的定義在iomanip.h中
輸入輸出類的繼承關(guān)系圖如下:
C++使用輸入輸出流“stream”的方式來(lái)實(shí)現(xiàn)的尖昏。
流指來(lái)自設(shè)備或者發(fā)送給設(shè)備的數(shù)據(jù)。
cout是輸出流的對(duì)象名稱构资,cin是輸入流的對(duì)象名稱抽诉。
下圖為輸入輸出流的使用關(guān)系圖:
有關(guān)cout和cin都是存放在C++的輸入輸出流庫(kù)中的,如果使用就必須在預(yù)處理中包含以下信息:
#include <iostream>
using namespace std;
從這點(diǎn)也能看出cout和cin不是C++提供的語(yǔ)句吐绵,因?yàn)镃++本身提供的語(yǔ)句迹淌,例如int,if等在使用的時(shí)候不需要在預(yù)處理中包含任何信息。
cout語(yǔ)句的格式為:cout<<表達(dá)式1<<表達(dá)式2<<……<<表達(dá)式n<<endl;
cin語(yǔ)句的格式為:cin>>變量1>>變量2>>……>>變量n;
cout語(yǔ)句的輸出也可以分為多行:
例如要輸出helloWorld以下的代碼都是正確的己单。
方法一:
#include <iostream>
using namespace std;
void main()
{
cout<<"hello";
cout<<"World"<<endl;
system("pause");
}
方法二:
#include <iostream>
using namespace std;
void main()
{
cout<<"hello"
<<"World"
<<endl;
system("pause");
}
需要注意cout不支持插入多個(gè)輸出項(xiàng)唉窃,例如以下代碼是錯(cuò)誤的:cout<<a,b,c<<endl;
而以下是正確的,因?yàn)楸磉_(dá)式作為了一項(xiàng):cout<<a+b+c<<endl;
使用cout做輸出流的時(shí)候不必考慮輸出的數(shù)據(jù)類型纹笼,因?yàn)閏out會(huì)按輸出數(shù)據(jù)的相應(yīng)類型進(jìn)行輸出句携。
與cout相似,cin也支持多行輸入,例如以下代碼:
方法一:
#include <iostream>
using namespace std;
void main()
{
int a,b,c;
cin>>a>>b>>c;
system("pause");
}
方法二:
#include <iostream>
using namespace std;
void main()
{
int iValue1,iValue2,iValue3;
cin>>iValue1;
如果使用控制符允乐,在預(yù)處理中還要加入#include <iomanip>
在編輯器寫(xiě)入以下代碼矮嫉,編譯并查看結(jié)果:
cin>>iValue2;
cin>>iValue3;
system("pause");
}
在使用輸入流的時(shí)候削咆,要注意cin語(yǔ)句中要輸入的數(shù)據(jù)類型,按照相應(yīng)的數(shù)據(jù)類型的格式輸入蠢笋,否則會(huì)出錯(cuò)誤拨齐。
在輸入輸出中,會(huì)有些特殊要求昨寞,例如輸出字段的寬度瞻惋,這里將要使用到控制符。
下表為常用控制符:
如果使用控制符援岩,在預(yù)處理中還要加入#include <iomanip>
在編輯器寫(xiě)入以下代碼歼狼,編譯并查看結(jié)果:
#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
cout<<"hello"<<setw(10)<<"World"<<endl;
system("pause");
}
與C++語(yǔ)言不同,C語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供了兩個(gè)控制臺(tái)格式化輸入輸出函數(shù)printf( ) 和scanf(), 這兩個(gè)函數(shù)可以在標(biāo)準(zhǔn)輸入輸出設(shè)備上以各種不同的格式讀寫(xiě)數(shù)據(jù)享怀。
printf()函數(shù)用來(lái)向標(biāo)準(zhǔn)輸出設(shè)備(屏幕)寫(xiě)數(shù)據(jù)羽峰,scanf() 函數(shù)用來(lái)從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤(pán))上讀數(shù)據(jù)。下面詳細(xì)介紹這兩個(gè)函數(shù)的用法添瓷。
在代碼編輯區(qū)鍵入以下代碼:( C語(yǔ)言的HelloWorld的寫(xiě)法 )
【F7】編譯梅屉,【Ctrl+F5】運(yùn)行,如圖所示運(yùn)行
#include <stdio.h>
void main()
{
printf("HelloWorld\n");
}
printf()函數(shù)
printf()函數(shù)是格式化輸出函數(shù), 一般用于向標(biāo)準(zhǔn)輸出設(shè)備按規(guī)定格式輸出信息鳞贷。在編寫(xiě)程序時(shí)經(jīng)常會(huì)用到此函數(shù)坯汤。printf()函數(shù)的調(diào)用格式為:
printf("字符串格式", 參量表);
例如以下代碼:
#include <stdio.h>
void? main()
{
printf("helloWorld\n");
int iValue = 200;
printf("price is %d\n",iValue);
}
格式化字符串包括兩部分內(nèi)容: 一部分是正常字符, 這些字符將按原樣輸出。另一部分是格式化規(guī)定字符, 以"%"開(kāi)始, 后跟一個(gè)或幾個(gè)規(guī)定字符,用來(lái)確定輸出內(nèi)容格式搀愧。
參量表是需要輸出的一系列參數(shù), 其個(gè)數(shù)必須與格式化字符串所說(shuō)明的輸出參數(shù)個(gè)數(shù)一樣多, 各參數(shù)之間用","分開(kāi), 且順序一一對(duì)應(yīng), 否則將會(huì)錯(cuò)誤惰聂。
printf(“helloWorld\n”)其中的helloWorld就為正常字符,它將原樣輸出咱筛。
printf(“price is %d\n”,value)其中的%d為格式化字符庶近,確定了整型數(shù)據(jù)類型。
printf(“price is %d\n”,value)其中的 \n 為轉(zhuǎn)義字符具有換行功能眷蚓。
(\n 功能等同于C++輸出中的 endl)
其中格式化規(guī)定字符如下:
printf()函數(shù)可以在"%"和字母之間插進(jìn)數(shù)字表示最大場(chǎng)寬鼻种。
可以在"%"和字母之間插進(jìn)數(shù)字表示最大場(chǎng)寬。
例如: %3d表示輸出3位整型數(shù), 不夠3位右對(duì)齊沙热。
? ? ? ? %9.2f 表示輸出場(chǎng)寬為9的浮點(diǎn)數(shù), 其中小數(shù)位為2, 整數(shù)位為6, 小數(shù)點(diǎn)? 占一位, 不夠9位右對(duì)齊叉钥。
? ? ? ? %8s表示輸出8個(gè)字符的字符串, 不夠8個(gè)字符右對(duì)齊。
在編輯器寫(xiě)入以下代碼篙贸,編譯并查看結(jié)果:
#include <stdio.h>
void main()
{
printf("%3d\n",15);
printf("%9.2f\n",3.141592f);
}
若想在輸出值前加一些0, 就應(yīng)在場(chǎng)寬項(xiàng)前加個(gè)0投队。
例如:?? %04d 表示在輸出一個(gè)小于4位的數(shù)值時(shí), 將在前面補(bǔ)0使其總寬度為4位。
如果用浮點(diǎn)數(shù)表示字符或整型量的輸出格式, 小數(shù)點(diǎn)后的數(shù)字代表最大寬度,小數(shù)點(diǎn)前的數(shù)字代表最小寬度爵川。
在編輯器寫(xiě)入以下代碼敷鸦,編譯并查看結(jié)果:
#include <stdio.h>
void main()
{
printf("%03d\n",15);
}
在以上的所有代碼中經(jīng)常可以看到\n這個(gè)特殊符號(hào),發(fā)現(xiàn)它的作用是換行扒披,下表為特殊符號(hào)的概括值依。
scanf()函數(shù)
scanf()函數(shù)是格式化輸入函數(shù), 它從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤(pán)) 讀取輸入的信息。
其調(diào)用格式為:? ? ? scanf("字符串格式", 地址表);
格式化字符串包括以下三類不同的字符:
?1. 格式化說(shuō)明符: 格式化說(shuō)明符與printf()函數(shù)中的格式說(shuō)明符基本相同碟案。
2. 空白字符: 空白字符會(huì)使scanf()函數(shù)在讀操作中略去輸入中的一個(gè)或多個(gè)空白字符愿险。
?3. 非空白字符: 一個(gè)非空白字符會(huì)使scanf()函數(shù)在讀入時(shí)剔除掉與這個(gè)非空白字符相同的字符。
地址表是需要讀入的所有變量的地址, 而不是變量本身价说。這與printf()函數(shù)完全不同, 要特別注意辆亏。各個(gè)變量的地址之間同","分開(kāi)。
scanf()函數(shù)先讀一個(gè)整型數(shù), 然后把接著輸入的逗號(hào)剔除掉, 最 后讀入另一個(gè)整型數(shù)鳖目。如果","這一特定字符沒(méi)有找到, scanf()函數(shù)就終止若 參數(shù)之間的分隔符為空格, 則參數(shù)之間必須輸入一個(gè)或多個(gè)空格扮叨。
在編輯器寫(xiě)入以下代碼,編譯并查看結(jié)果:
#include <stdio.h>
void main()
{
int iValue1, iValue2;
? ? ? ? ? ? ? scanf( "%d, %d", &iValue1, &iValue2 );
printf(" iValue1? is %d, iValue2? is %d", iValue1, iValue2);
}
調(diào)試器的輸出功能
<windows.h> 文件聲明了 OutputDebugString() 函數(shù)领迈。使用一個(gè) NULL 結(jié)尾的字符串并簡(jiǎn)單調(diào)用 OutputDebugString() 將使信息出現(xiàn)在vs2005調(diào)試器中彻磁。
在編輯器寫(xiě)入以下代碼,編譯并查看結(jié)果:????
#include <windows.h>
void main()
{
OutputDebugString(L"helloWorld");
}
【Ctrl+F5】運(yùn)行后如圖位置查看結(jié)果:
輸入輸出是學(xué)習(xí)程序的一個(gè)新的起點(diǎn)惦费,掌握這些技術(shù)可以方便的查看自己所編寫(xiě)的程序的過(guò)程或者結(jié)果兵迅。