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,程序結束。