1.scanf()函數
原型:int scanf(const char *restrict format,......);
入口參數:第一個參數是格式字符串,它指定了輸入的格式,......格式化后的字符串存取地址。
返回值:函數返回值為int類型,如果讀取到了“文件結束”則返回EOF,EOF為Ctrl+z或者Ctrl+d。其他情況則返回int型數字,例如:int res = scanf("%d %d",&a,&b);如果a,b都讀取成功,則返回2;如果a,b只讀取成功了一個,則返回1;如果a,b都沒有讀取成功,則返回0.
說明:scanf()函數是C語言庫中的函數,但由於C++的向下兼容性,所以在C++中也可以使用此函數。次函數是從標准輸入流stdio(一般是鍵盤輸入)中讀取數據,並將其按照指定格式輸入到制定地址。
頭文件:#include <stdio.h>
用例:
#include <stdio.h> #include <iostream> using namespace std; int main() { int a,b; scanf("%d %d",&a,&b); //注意此處輸入的格式,兩個輸入數字之間要以空格分隔開來。 printf("%d %d",a,b); }
2.cin()類(此類命名空間都在std中,無需添加頭文件)。
2.1.cin>>函數
說明:當我們從鍵盤輸入時,有一個緩沖區,當輸入結束時會將所輸入的數據存到緩沖區。而cin>>的作用就是從緩沖區讀數據,所以當緩沖區數據本來就有殘留時,會出現讀取出錯的問題。值得一提的是:cin函數遇到空格、TAB、換行時讀取結束。
用例:
1.輸入一個字符串。
#include <iostream> using namespace std; void main () { char a[10]; cin>>a; cout<<a<<endl; }
輸入:aaabbbccc
輸出:aaabbbccc
輸入:aaa bbb ccc
輸出:aaa
2.輸入一個數字。
#include <iostream> using namespace std; void main () { int a,b; cin>>a>>b; cout<<a+b<<endl; }
輸入:1回車2回車
輸出:3
2.2.cin.get()函數
原型:該函數有三種形式,分別是char ch = cin.get(), cin.get(char ch), cin.get(array,length)
1.cin.get() 和 cin.get(char ch)的用法
這兩個函數功能基本一樣,都是讀取緩沖區的一個字符,遇到換行符結束,但是這兩個函數都不會丟棄緩沖區里邊的空格 和換行符。char ch = cin.get(), cin.get(char ch)這兩句可得到相同的結果。
用例:
#include <iostream> using namespace std; void main() { char ch1,ch2; cin.get(ch1); ch2 = cin.get(); cout<<ch1<<endl; cout<<ch2<<endl; }
輸入:a換行
輸出:a
(此處有一行空行,因為不會丟棄緩沖區里邊的空行)
---------------------------------------------------------------------
2.cin.get(array,length)
這個函數是從緩沖區讀取字符串,其中array是字符串接受地址,length-1是字符串長度,因為最后一個字符必須存 儲'\0'結束符,所以此函數只能接受length-1個字符。
用例:
#include <iostream>
using namespace std;
void main()
{
char ch[5];
cin.get(ch,5);
cou<<ch<<endl;
}
輸入:abcdefghi
輸出:abcd
2.3.cin.getline(string str,int length)函數
說明:接收一個長度為length-1的字符串,包括空格,遇到換行結束。
#include<iostream> using namespace std; int main() { char ch[10]; cin.getline(ch,5); cout<<ch<<endl; return 0; }
輸入:aaaaaaaa
輸出:aaaa
3.getline()函數
原型:ssize_t getline(char **lineptr,size_t *n,FILE *stream);(在C語言的GCC擴展定義中)
getline(cin,string s);(在C++中)
說明:getline不是C語言的庫函數,而是GCC的擴展定義或者C++庫函數,在C語言中和C++中的使用是不同的.
用例1:(在C++中,應包含頭文件<string>,讀取字符串包含空格,遇到換行結束,不包括換行)
#include <iostream> using namespace std; int main() { string s; getline(cin,s); cout<<s<<endl; return 0; }
輸入:abcdefgh換行
輸出:abcdefgh
用例2:(在C語言中,GCC擴展定義)
待補充。。。。。。
4.gets()函數
原型:char *gets(char *buffer);
入口參數:從緩沖區讀取字符串后的寫入地址
返回值:讀取成功后返回與入口參數buffer相同的地址。讀取錯誤返回NULL。
頭文件:<string>
說明:接收輸入的字符串,沒有上限,但是要保證buffer足夠大,以換行結束,並將換行符轉化為'\0'。
用例:
#include<iostream> #include<string> using namespace std; int main() { char ch[10]; gets(ch); cout<<ch<<endl; return 0; }
輸入:abcdefg回車
輸出:abcdefg
5.getchar()函數
原型:int getchar(void);
返回值:讀取成功返回用戶輸入的ASCII碼,讀取失敗返回EOF.
頭文件:<string>或者<stdio.h>
說明:接收一個字符的輸入,包含空格,遇到換行符結束。
#include<iostream> #include<string> using namespace std; int main() { char ch; ch = getchar(); cout<<ch<<endl; return 0; }
輸入:abc回車
輸出:a
