C++格式化輸入輸出~~~~~~~~~

cin與cout 
一:標準輸入函數cin 
    不知道說它是個函數對還是不對,它是代表標準的輸入設備--鍵盤。他是屬於流的,他的用法和流的用法是一樣的。也就是:cin>>變量;
小小的說明一下,輸入多個變量可以寫在一行,如:cin>>x>>y>>z;

這樣寫不是不允許,而是不好看,如果是不同的變量類型,那就更是沒頭沒腦了。除了你,人家是不知道該輸入什麼的,所以,一般在輸入語句的前面,我們一般都要做一個提示,請輸入×××,讓人家心裏有個底,知道這個變量是做什麼的。 如:

#include<iostream>
using namespace std;
int main()
{
	int i; 
	cout<<"please input a number:" << endl;
	cin>>i; 
	cout<<"i="<<i<<endl;
	system("pause");
	return 0;
}


如果你輸入的是一個字符如'a'那麼他也不檢查,但你輸出的結果不是正確的,這要手工進行檢查。如果在循環內部輸入不合法的變量值,那麼也將陷入死循環。如下:

/*一個輸入不合法變量陷入死循環的例子*/ 

#include <iostream> 
using namespace std;
int main() 
{ 
	int i = 0; 
	while(i!=-1) 
	{ 
		cout<<"i=" << endl;
		cin>>i;    /*請輸入不是一個字符如'a'試試*/ 
		cout<< "i=" << i <<endl; 
	} 
	return 0;
}


    如上一個程序,如果你輸入的不合法,那就將陷入死循環。解決的辦法有個一,把cin>>i;語句移到判斷循環的語句中,那麼,你輸入的如果是不合法的變量,他將跳出循環。

 

 cin是用空格來分隔輸入的。請看看如下的例子:

/*一個空格分隔使輸入的變量達不到希望的值*/ 

#include <iostream>
using namespace std;
int main() 
{ 
	char str[20]; 
	cout<<"please input a string:" << endl; 
	cin>>str;    /*你試着輸入"hello word"*/ 
	cout<<"str="<<str << endl; 
	system("pause");
	return 0;
}


看得到是什麼結果呢?得到的僅僅是str=hello,爲什麼呢?因爲cin是以空格爲分隔的,當你輸入一個空格時,那他就認爲後面的輸入不屬於這裏了,
認爲應該給後面的變量了。另外,當你輸入的字符串大於分配的空間時,還會出現溢出現象。當然,還有整行輸入的函數,包括空格也一起輸入了,以後也會學到。

二、標準輸出函數cout 
    說cout是函數,也跟cin一樣,不知道對不對。他代表的是標準輸出設備--顯示器。其實前面已經用過很多次這個函數了。我們就通過一個例子來進行格式化的輸出就是了. 
    首先,我們可以按16進制,8進制和10進制來顯示我們的數據,如下:

/*一個按進制輸出的例子*/ 

#include<iostream>
#include<iomanip>
using namespace std;
int main() 
{ 
	int x=30, y=300, z=1024; 
	cout<<x<<' '<<y<<' '<<z<<endl;       //按十進制輸出 
	cout<<oct<<x<<' '<<y<<' '<<z<<endl; //按八進制輸出 
	cout<<setiosflags(ios::showbase);    //設置基指示符 
	cout<<x<<' '<<y<<' '<<z<<endl;       //仍按八進制輸出 
	cout<<resetiosflags(ios::showbase); //取消基指示符 
	cout<<hex<<x<<' '<<y<<' '<<z<<endl; //按十六進制輸出 
	cout<<setiosflags(ios::showbase | ios::uppercase); 
	//設置基指示符和數值中的字母大寫輸出, 
	cout<<x<<' '<<y<<' '<<z<<endl; //仍按十六進制輸出 
	cout<<resetiosflags(ios::showbase | ios::uppercase); 
	//取消基指示符和數值中的字母大寫輸出 
	cout<<x<<' '<<y<<' '<<z<<endl; //仍按十六進制輸出 
	cout<<dec<<x<<' '<<y<<' '<<z<<endl; //按十進制輸出 
	system("pause");
	return 0;
}

輸出結果爲:


比如要輸出以下的結果:


“第一章 
    1.1   什麼是C語言...........................1 
    1.11 C語言的歷史..........................58 
第二章”


#include<iostream>
#include <iomanip> 
using namespace std;
int main() 
{ 
	cout<<"第一章"<<endl; 
	cout<<"    "; 
	cout<<setiosflags(ios::left)<<setw(7);         //設置寬度爲7,left對齊方式 
	cout<<"1.1"; 
	cout<<"什麼是C語言"; 
	cout<<resetiosflags(ios::left);                //取消對齊方式 
	cout<<setfill('.')<<setw(30)<<1<<endl;         //寬度爲30,填充爲'.'輸出 
	cout<<setfill(' ');                            //恢復填充爲空格 
	cout<<"    "; 
	cout<<setw(7)<<setiosflags(ios::left);         //設置寬度爲7,left對齊方式 
	cout<<"1.11"; 
	cout<<"C語言的歷史"; 
	cout<<resetiosflags(ios::left);                //取消對齊方式 
	cout<<setfill('.')<<setw(30)<<58<<endl;        //寬度爲30,填充爲'.'輸出      
	cout <<"第二章"<<endl; 
	system("pause");
	return 0;
} 

輸出結果如下:


   

/*關於浮點數的格式*/ 

#include <iomanip> 
#include<iostream>
using namespace std;
int main() 
{ 
	float f=2.0/3.0,f1=0.000000001,f2=-9.9; 
	cout<<f<<' '<<f1<<' '<<f2<<endl;      //正常輸出 
	cout<<setiosflags(ios::showpos);      //強制在正數前加+號 
	cout<<f<<' '<<f1<<' '<<f2<<endl; 
	cout<<resetiosflags(ios::showpos);    //取消正數前加+號 
	cout<<setiosflags(ios::showpoint);    //強制顯示小數點後的無效0 
	cout<<f<<' '<<f1<<' '<<f2<<endl; 
	cout<<resetiosflags(ios::showpoint); //取消顯示小數點後的無效0 
	cout<<setiosflags(ios::scientific);   //科學記數法 
	cout<<f<<' '<<f1<<' '<<f2<<endl; 
	cout<<resetiosflags(ios::scientific); //取消科學記數法 
	cout<<setiosflags(ios::fixed);        //按點輸出顯示 
	cout<<f<<' '<<f1<<' '<<f2<<endl; 
	cout<<resetiosflags(ios::fixed);       //取消按點輸出顯示 
	cout<<setprecision(18);               //精度爲18,正常爲6 
	cout<<f<<' '<<f1<<' '<<f2<<endl; 
	cout<<setprecision(6);                //精度恢復爲6 
	cout<<f<<' '<<f1<<' '<<f2<<endl; 
	system("pause");
	return 0;
}

輸出結果如下:


   在c/c++系統中除了標準的輸入輸出外,還提供了更多的輸入函數。這寫函數主要有getch(),getche(), 
getchar(),cin.get(),putch(),putchar(),cout.put(),gets(),cin.getline(),puts()。另外
還有些爲了讓緩衝區不影響程序的正確操作的緩衝去的操作,如:cin.putback(),fflush(stdin),cout.flush().我們
做一下簡單的說明。 
    1、getch()和getche(),非緩衝式輸入,從鍵盤讀入一個字符。getch()讀入字符不顯示。有conio.h支持。 
    2、cin.get(),getchar(),緩衝式輸入,從鍵盤讀入一個字符,並顯示。getchar()由stdio.h支持,cin.get()由iostream.h支持。 
    3、putch()和putchar(),非緩衝式輸出,輸出一個字符到顯示器。putch()由conio.h支持,putchar()由stdio.h支持。 
    4、cout.put(),緩衝式輸出,輸出一個字符到顯示器。由iostream.h支持。 
    5、gets()和cin.geline(),緩衝式輸入,讀入一字符串(包括空格,不包括最後的回車),gets()由stdio.h支持,cin.getline()由iostream.h支持。 
    6、puts(),非緩衝輸出,輸出一個字符串,由stdio.h支持。 
    7、cin.putback(),把一個字符送回輸入緩衝區。 
    8、fflush(stdin),清除輸入緩衝區操作。無法清除cin.get()等帶來的操作。 
    9、cout.flush(),清楚輸出緩衝區。 
    在這裏我們稍微說一下輸入/輸出緩衝區,這是爲了減少程序訪問io帶來中斷而設的一段空間。當程序滿足某個刷新條件時,那就將清理緩衝區。具體條件爲: 
    1、輸入緩衝區 
a,程序要求輸入時,按下了回車鍵。 
b,遇到程序結束。 
c,遇到下一條輸入語句。 
d,遇到清除緩衝區操作 
e,緩衝區溢出 
    2、輸出緩衝區 
a,輸出緩衝區溢出 
b,遇到下一條輸入語句 
c,使用刷新緩衝區迫使清除 
d,程序結束。 

發佈了29 篇原創文章 · 獲贊 10 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章