C語言:
#include<stdio.h>
函數:gets(char*)
舉例:
char a[1000];
gets(a);
int len = strlen(a);//獲取串長方法
C++:
1.兼容C語言,頭文件:#include<stdio.h>
2.#include<iostream>
函數:getline(char*,int* size)
舉例:
char a[1000];
getline(a,1000);
int len = strlen(a);//獲取串長方法;
說明:
1.兩種方法實現的功能相同。
2.讀到回車或者文件結束符eof結束。
3.讀取一行時,末尾添'\0',換行符不存儲
4.感謝一下兩篇博文:
a. http://blog.csdn.net/t_w_s/article/details/9255593
{
當在控制台輸入數據時,所有的數據都是輸入到緩沖區的,當從其中提取數據時,也是從緩沖區提取的!其有一個指向緩沖區的指針,就是通過此指針對數據提取的。
例如cin>>a;就是通過>>的重載實現從緩沖區取出數據並進行相應的轉換后賦值給a;如果緩沖區沒有數據的話,則等待用戶輸入數據。 1.對於從控制台讀入數據到數據結構中,主要要了解的是: 1,讀入的數據是什么(尤其針對字符串,是否包括空格,換行符等)。 2,讀入數據后緩沖區的指針指向什么位置(緩沖區都指向讀入數據的下一位) 通常讀入的數據可以分為兩種,一種是數值數據,例如int,float等。另一種是字符數據,包括單個字符和字符串。 對於數值數據,直接將數據讀入到相關的數據結構中即可。指針指向數據的后一位。可以指向換行符! 對於字符數據,如果是單個字符讀入的話,類似數值數據。也可以指向換行符! 對於字符數據,如果是讀入字符串的話,則針對存儲類型有不同的實現機制: 1.如果用c風格的字符數組保存字符串,則字符串的結尾一定是會添加0作為結束符的 2.如果用string保存字符串,則結尾一定是不增加0的。 char a[100]; cin.getline(a,100);//讀入一行數據,同時將數據存放在a字符數組中,末尾添0,同時換行符不存儲。(指針指向下一行開始!如果沒有數據了則設置指針讀完eof。指針指向下一行很容易理解,既然是getline,自然是將此行數據全部讀完了,那指針指向下一位自然是下一行開始。只是在存儲時將換行符舍棄了而已) 2.console程序中,按下enter鍵,輸入數據進入緩沖區,后面的取數據操作都是在緩沖區中進行的。 當輸入字符串時,主要要考慮到不同的輸入函數對字符串的讀取方式。包括空白字符是否讀取,字符串末尾是否補‘\0’等。 對於各種輸入函數作如下整理: cin>>a;從緩沖區中取數據賦值給a,遇到空格,tab,enter結束。當a是字符串時,在a末尾添加0.(如果字符串長度>=a.len,最后一位不輸入數據,輸入0) cin.getline(s,20,'\n');給s賦值,遇到enter結束,不保存enter,同時在s末尾添加0(如果字符串長度>=20,最后一位不輸入數據,輸入0),也就是說s有效長度最多19,必須以0結尾。 getchar();從緩沖區中獲取一個字符,可以是任何字符,包括空格,tab,enter等。 getch();直接用戶在屏幕中輸入一個字符,其就返回一個字符,不從緩沖區中取,其是針對屏幕的。 gets();從緩沖區讀入字符串,當遇到enter時結束,不保存enter。遇到空格,tab保存,同時繼續向后字符串末尾也補0. scanf();根據參數形式確定了最終的賦值情況。 scanf("%d,%d",&a,&b)則屏幕應該輸入10,20 scanf("%d%d“,&a,&b)則屏幕輸入10 20 或者10 tab 20 或者10 enter 20 當輸入為字符串時,不讀取enter,‘ ’,tab,末尾補0,但是讀取‘ ’和tab,當輸入字符時,讀取enter('\n') 3.對於接收從控制台輸入的數據,可以采用如下規則: 1,對於行數不固定的輸入,只需要有行輸入結束的判斷即可,由於行結束輸入了,整個輸入也就結束了,所以可以直接利用cin來判斷,當整個輸入結束時,cin 為false 2.,對於每一行的數據,如果數據的個數和數據的類型確定的話,則可以用cin>>a>>b...等方式來進行讀入數據。 3,對於每一行的數據,如果行數據個數不固定,則在接收數據的同時需要判斷行結束標志:可以采用如下兩種處理方式: 對於數據間有空格的數據,可以用cin.get() != '\n'來持續輸入:例如 123 ab 34 cd 334 def 對於數據間沒有空格的輸入,可以用stringstream來。例如123a34b324c 4.stringstream的使用注意點: 1.每次使用stringstream之前都要調用clear()函數清空。 2.stringstream是否結束是采用eof()函數來判斷的,而不是像cin一樣用此對象本身來判斷,例子: [cpp] view plaincopy #include <iostream> #include <sstream> using namespace std; string s; stringstream ss; int a; char c; while(getline(cin,s)){//s = 123A23B234C...... ss.clear(); ss<<s; while(!ss.eof()){ ss>>a>>c; } } 5.讀入單個字符的方法:cin.get(c);或者cin.get(),其返回值為char. 讀入一行字符的方法cin.getline():其是iostream中的函數。getline(cin,s):其是stl中的函數. 1,char c[100]; cin.getline(c,100)//數據保存在字符數組中,如果字符數組開辟的小於一行的輸入的話則會丟失相關數據 2,string s; getline(cin,s);//數據保存在字符串中,不存在1中的問題。 6.cin>>的使用:從緩沖區指針處開始,跳過空白符(空格,tab等)和換行符,取相關數據到變量中,直到遇到下一個空白符(空格,tab等)和換行符,結束。 如果數據無法轉換,則cin返回false(cin返回false除了輸入結束外,還有輸入出錯的情況!!) string a;cin>>a;從緩沖區指針處開始,按照上面說明的方法,取數據放入a中。 int b;cin>>b;同上 char c[100];對於c風格的字符數組,方法同上,只是字符數組的最后都會自動補0的。
}
2.http://www.cnblogs.com/xkfz007/archive/2012/08/02/2619446.html