六月丁香五月婷婷,丁香五月婷婷网,欧美激情网站,日本护士xxxx,禁止18岁天天操夜夜操,18岁禁止1000免费,国产福利无码一区色费

學習啦 > 學習英語 > 專業(yè)英語 > 計算機英語 > c中getline的用法

c中getline的用法

時間: 長思709 分享

c中getline的用法

  下面小編就跟你們詳細介紹下c中getline的用法的用法,希望對你們有用。

  c中getline的用法的用法如下:

  getline函數(shù)是一個比較常見的函數(shù)。根據(jù)它的名字我們就可以知道這個函數(shù)是來完成讀入一行數(shù)據(jù)的?,F(xiàn)在對getline函數(shù)進行一個總結。

  在標準C語言中,getline函數(shù)是不存在的。

  下面是一個簡單的實現(xiàn)方式:

  復制代碼

  int getline_(char s[],int lim){

  int c,i;

  i=0;

  while((c=getchar())!=EOF&&c!='\n'&&i<lim-1)

  s[i++]=c;

  s[i]='

c中getline的用法

時間: 長思709 分享

c中getline的用法

  下面小編就跟你們詳細介紹下c中getline的用法的用法,希望對你們有用。

  c中getline的用法的用法如下:

  getline函數(shù)是一個比較常見的函數(shù)。根據(jù)它的名字我們就可以知道這個函數(shù)是來完成讀入一行數(shù)據(jù)的。現(xiàn)在對getline函數(shù)進行一個總結。

  在標準C語言中,getline函數(shù)是不存在的。

  下面是一個簡單的實現(xiàn)方式:

  復制代碼

  int getline_(char s[],int lim){

  int c,i;

  i=0;

  while((c=getchar())!=EOF&&c!='\n'&&i<lim-1)

  s[i++]=c;

  s[i]='\0';

  return i;

  }

  復制代碼

  下面是一個簡單的測試程序:

  復制代碼

  int test1(){

  char s[100];

  int len;

  while((len=getline_(s,100))>0)

  printf("%s\n",s);

  return 0;

  }

  復制代碼

  但是這個實現(xiàn)是有問題的,就是遇到空行的時候也會停止的。

  為了解決這個問題,我們需要重新考慮while循環(huán)的判斷條件。

  在上面的實現(xiàn)中,我們是遇到EOF和換行'\n'的時候都停止 ,然后通過判斷所讀到的字符串的長度是否大于0來判斷是否結束。

  為了能讀入空行,我們需要判斷一下是否讀入的是結尾EOF,如果不是就繼續(xù)讀取就可以了。

  還有一點,EOF是什么?

  EOF是C語言中為了區(qū)分有效數(shù)據(jù)和輸入結束符的。

  C語言采用的解決辦法是:在沒有輸入時getchar函數(shù)將返回一個特殊值,這個特殊值與任何實際字符都不同。這個值成為EOF(end of file ,文件結束)。我們在聲明變量c 的時候,必須讓它大到足以存放getchar函數(shù)返回的任何值。之所以不把c聲明成char類型,是因為它必須足夠大,除了能存儲任何可能的字符外還要能存儲文件結束符EOF。

  EOF的輸入由系統(tǒng)鎖定。windows下是ctrl+z,linux/unix下是ctrl+d。

  下面是給出的修改后的getline函數(shù)

  復制代碼

  int getline2_(char s[],int lim){

  int c,i;

  i=0;

  while((c=getchar())!=EOF&&c!='\n'&&i<lim-1)

  s[i++]=c;

  if(c==EOF&&i==0)

  return -1;

  s[i]='\0';

  return i;

  }

  復制代碼

  如果是文件結尾(c==EOF&&i==0)的話,我們就返回-1,通過判斷返回值是否為-1來決定是否繼續(xù)入輸入:

  復制代碼

  int test1(){

  char s[100];

  int len;

  while((len=getline2_(s,100))!=-1)

  printf("%s\n",s);

  return 0;

  }

  復制代碼

  這樣話就可以正確讀入所有的輸入了。

  在gcc編譯器中,對標準庫進行了擴展,加入了一個getline函數(shù)。該函數(shù)的定義如下:

  #include <stdio.h>

  ssize_t getline(char **lineptr, size_t *n, FILE *stream);

  其中*lineptr指向一個動態(tài)分配的內(nèi)存區(qū)域。*n是所分配內(nèi)存的長度。如果*lineptr是NULL的話,getline函數(shù)會自動進行動態(tài)內(nèi)存的分配(忽略*n的大?。?,所以使用這個函數(shù)非常注意的就使用要注意自己進行內(nèi)存的釋放。

  如果*lineptr分配了內(nèi)存,但在使用過程中發(fā)現(xiàn)所分配的內(nèi)存不足的話,getline函數(shù)會調(diào)用realloc函數(shù)來重新進行內(nèi)存的分配,同時更新*lineptr和*n。

  注意*lineptr指向的是一個動態(tài)分配的內(nèi)存,由malloc,calloc或realloc分配的,不能是靜態(tài)分配的數(shù)組。

  下面是使用這個函數(shù)情況,事先分配了動態(tài)內(nèi)存。

  復制代碼

  void test2(){

  int read;

  int len=100;

  char *line=NULL;

  if((line=malloc((len+1)))==NULL){

  printf("Can't get memory\n");

  exit(-1);

  }

  while((read=getline(&line,&len,stdin))!=-1)

  printf("%s\n",line);

  free(line);

  }

  復制代碼

  下面是一個沒有提前進行內(nèi)存分配的情況:

  復制代碼

  void test3(){

  int read;

  int len=0;

  char *line=NULL;

  while((read=getline(&line,&len,stdin))!=-1)

  printf("%s\n",line);

  free(line);

  }

  復制代碼

  同樣最后要進行內(nèi)存的釋放。

  這兒還要注意一個問題就是,getline函數(shù)讀入的一行是包括最后的換行符的。之前我們寫的函數(shù)是不包括這個的。下面我們進行修改一下,也讀入換行符。

  復制代碼

  int getline3_(char s[],int lim){

  int c,i;

  i=0;

  while((c=getchar())!=EOF&&c!='\n'&&i<lim-1)

  s[i++]=c;

  if(c==EOF&&i==0)

  return -1;

  if(c=='\n')

  s[i++]=c;

  s[i]='\0';

  return i;

  }

  復制代碼

  這樣也讀入了換行符。這樣的話,這個getline函數(shù)就不錯了。

  在C++中為了使用的方便,C++在標準庫中添加了getline函數(shù)。

  其實在C++中對不同的輸入流對象都定義了一個getline函數(shù),即:

  std::fstream::getline

  std::istream::getline

  std::ifstream::getline

  std::iostream::getline

  std::wfstream::getline

  std::wistream::getline

  std::wifstream::getline

  std::wiostream::getline

  std::stringstream::getline

  std::basic_fstream::getline

  std::basic_istream::getline

  std::istringstream::getline

  std::wstringstream::getline

  std::basic_ifstream::getline

  std::basic_iostream::getline

  std::wistringstream::getline

  std::basic_stringstream::getline

  std::basic_istringstream::getline

  這兒我們討論標準輸入對象的getline函數(shù),其他的對象的情都是類似的。

  在頭文件<iostream>中聲明了getline函數(shù):

  istream::getline

  istream& getline (char* s, streamsize n );

  istream& getline (char* s, streamsize n, char delim );

  函數(shù)是C類型的數(shù)組。因為C++中允許對函數(shù)進行重載,所以可以有多個同名函數(shù)。delim參數(shù)是指定分隔符。如果不指定的話,默認使用'\n'

  下面是一個例子:

  void test1(){

  char line[100];

  while(cin.getline(line,100))

  cout<<line<<endl;

  }

  注意這兒的getline是要讀入空白符。但是不包括最后的換行符。

  C++中還定義了一個在std名字空間的全局函數(shù),因為這個getline函數(shù)的參數(shù)使用了string字符串,所以聲明在了<string>頭文件中了。

  聲明如下:

  istream& getline ( istream& is, string& str, char delim );

  istream& getline ( istream& is, string& str );

  簡單的示例如下:

  void test2(){

  string line;

  while(getline(cin,line))

  cout<<line<<endl;

  }

  注意此處也是不讀入換行符的。

  所以在C++中讀取一行的函數(shù)是不讀入換行符的,而GCC中getline函數(shù)是讀入換行符的??梢岳斫鉃椋话闱闆r下不讀入,特別的是GCC的讀入。

';

  return i;

  }

  復制代碼

  下面是一個簡單的測試程序:

  復制代碼

  int test1(){

  char s[100];

  int len;

  while((len=getline_(s,100))>0)

  printf("%s\n",s);

  return 0;

  }

  復制代碼

  但是這個實現(xiàn)是有問題的,就是遇到空行的時候也會停止的。

  為了解決這個問題,我們需要重新考慮while循環(huán)的判斷條件。

  在上面的實現(xiàn)中,我們是遇到EOF和換行'\n'的時候都停止 ,然后通過判斷所讀到的字符串的長度是否大于0來判斷是否結束。

  為了能讀入空行,我們需要判斷一下是否讀入的是結尾EOF,如果不是就繼續(xù)讀取就可以了。

  還有一點,EOF是什么?

  EOF是C語言中為了區(qū)分有效數(shù)據(jù)和輸入結束符的。

  C語言采用的解決辦法是:在沒有輸入時getchar函數(shù)將返回一個特殊值,這個特殊值與任何實際字符都不同。這個值成為EOF(end of file ,文件結束)。我們在聲明變量c 的時候,必須讓它大到足以存放getchar函數(shù)返回的任何值。之所以不把c聲明成char類型,是因為它必須足夠大,除了能存儲任何可能的字符外還要能存儲文件結束符EOF。

  EOF的輸入由系統(tǒng)鎖定。windows下是ctrl+z,linux/unix下是ctrl+d。

  下面是給出的修改后的getline函數(shù)

  復制代碼

  int getline2_(char s[],int lim){

  int c,i;

  i=0;

  while((c=getchar())!=EOF&&c!='\n'&&i<lim-1)

  s[i++]=c;

  if(c==EOF&&i==0)

  return -1;

  s[i]='

c中getline的用法

時間: 長思709 分享

c中getline的用法

  下面小編就跟你們詳細介紹下c中getline的用法的用法,希望對你們有用。

  c中getline的用法的用法如下:

  getline函數(shù)是一個比較常見的函數(shù)。根據(jù)它的名字我們就可以知道這個函數(shù)是來完成讀入一行數(shù)據(jù)的。現(xiàn)在對getline函數(shù)進行一個總結。

  在標準C語言中,getline函數(shù)是不存在的。

  下面是一個簡單的實現(xiàn)方式:

  復制代碼

  int getline_(char s[],int lim){

  int c,i;

  i=0;

  while((c=getchar())!=EOF&&c!='\n'&&i<lim-1)

  s[i++]=c;

  s[i]='\0';

  return i;

  }

  復制代碼

  下面是一個簡單的測試程序:

  復制代碼

  int test1(){

  char s[100];

  int len;

  while((len=getline_(s,100))>0)

  printf("%s\n",s);

  return 0;

  }

  復制代碼

  但是這個實現(xiàn)是有問題的,就是遇到空行的時候也會停止的。

  為了解決這個問題,我們需要重新考慮while循環(huán)的判斷條件。

  在上面的實現(xiàn)中,我們是遇到EOF和換行'\n'的時候都停止 ,然后通過判斷所讀到的字符串的長度是否大于0來判斷是否結束。

  為了能讀入空行,我們需要判斷一下是否讀入的是結尾EOF,如果不是就繼續(xù)讀取就可以了。

  還有一點,EOF是什么?

  EOF是C語言中為了區(qū)分有效數(shù)據(jù)和輸入結束符的。

  C語言采用的解決辦法是:在沒有輸入時getchar函數(shù)將返回一個特殊值,這個特殊值與任何實際字符都不同。這個值成為EOF(end of file ,文件結束)。我們在聲明變量c 的時候,必須讓它大到足以存放getchar函數(shù)返回的任何值。之所以不把c聲明成char類型,是因為它必須足夠大,除了能存儲任何可能的字符外還要能存儲文件結束符EOF。

  EOF的輸入由系統(tǒng)鎖定。windows下是ctrl+z,linux/unix下是ctrl+d。

  下面是給出的修改后的getline函數(shù)

  復制代碼

  int getline2_(char s[],int lim){

  int c,i;

  i=0;

  while((c=getchar())!=EOF&&c!='\n'&&i<lim-1)

  s[i++]=c;

  if(c==EOF&&i==0)

  return -1;

  s[i]='\0';

  return i;

  }

  復制代碼

  如果是文件結尾(c==EOF&&i==0)的話,我們就返回-1,通過判斷返回值是否為-1來決定是否繼續(xù)入輸入:

  復制代碼

  int test1(){

  char s[100];

  int len;

  while((len=getline2_(s,100))!=-1)

  printf("%s\n",s);

  return 0;

  }

  復制代碼

  這樣話就可以正確讀入所有的輸入了。

  在gcc編譯器中,對標準庫進行了擴展,加入了一個getline函數(shù)。該函數(shù)的定義如下:

  #include <stdio.h>

  ssize_t getline(char **lineptr, size_t *n, FILE *stream);

  其中*lineptr指向一個動態(tài)分配的內(nèi)存區(qū)域。*n是所分配內(nèi)存的長度。如果*lineptr是NULL的話,getline函數(shù)會自動進行動態(tài)內(nèi)存的分配(忽略*n的大小),所以使用這個函數(shù)非常注意的就使用要注意自己進行內(nèi)存的釋放。

  如果*lineptr分配了內(nèi)存,但在使用過程中發(fā)現(xiàn)所分配的內(nèi)存不足的話,getline函數(shù)會調(diào)用realloc函數(shù)來重新進行內(nèi)存的分配,同時更新*lineptr和*n。

  注意*lineptr指向的是一個動態(tài)分配的內(nèi)存,由malloc,calloc或realloc分配的,不能是靜態(tài)分配的數(shù)組。

  下面是使用這個函數(shù)情況,事先分配了動態(tài)內(nèi)存。

  復制代碼

  void test2(){

  int read;

  int len=100;

  char *line=NULL;

  if((line=malloc((len+1)))==NULL){

  printf("Can't get memory\n");

  exit(-1);

  }

  while((read=getline(&line,&len,stdin))!=-1)

  printf("%s\n",line);

  free(line);

  }

  復制代碼

  下面是一個沒有提前進行內(nèi)存分配的情況:

  復制代碼

  void test3(){

  int read;

  int len=0;

  char *line=NULL;

  while((read=getline(&line,&len,stdin))!=-1)

  printf("%s\n",line);

  free(line);

  }

  復制代碼

  同樣最后要進行內(nèi)存的釋放。

  這兒還要注意一個問題就是,getline函數(shù)讀入的一行是包括最后的換行符的。之前我們寫的函數(shù)是不包括這個的。下面我們進行修改一下,也讀入換行符。

  復制代碼

  int getline3_(char s[],int lim){

  int c,i;

  i=0;

  while((c=getchar())!=EOF&&c!='\n'&&i<lim-1)

  s[i++]=c;

  if(c==EOF&&i==0)

  return -1;

  if(c=='\n')

  s[i++]=c;

  s[i]='\0';

  return i;

  }

  復制代碼

  這樣也讀入了換行符。這樣的話,這個getline函數(shù)就不錯了。

  在C++中為了使用的方便,C++在標準庫中添加了getline函數(shù)。

  其實在C++中對不同的輸入流對象都定義了一個getline函數(shù),即:

  std::fstream::getline

  std::istream::getline

  std::ifstream::getline

  std::iostream::getline

  std::wfstream::getline

  std::wistream::getline

  std::wifstream::getline

  std::wiostream::getline

  std::stringstream::getline

  std::basic_fstream::getline

  std::basic_istream::getline

  std::istringstream::getline

  std::wstringstream::getline

  std::basic_ifstream::getline

  std::basic_iostream::getline

  std::wistringstream::getline

  std::basic_stringstream::getline

  std::basic_istringstream::getline

  這兒我們討論標準輸入對象的getline函數(shù),其他的對象的情都是類似的。

  在頭文件<iostream>中聲明了getline函數(shù):

  istream::getline

  istream& getline (char* s, streamsize n );

  istream& getline (char* s, streamsize n, char delim );

  函數(shù)是C類型的數(shù)組。因為C++中允許對函數(shù)進行重載,所以可以有多個同名函數(shù)。delim參數(shù)是指定分隔符。如果不指定的話,默認使用'\n'

  下面是一個例子:

  void test1(){

  char line[100];

  while(cin.getline(line,100))

  cout<<line<<endl;

  }

  注意這兒的getline是要讀入空白符。但是不包括最后的換行符。

  C++中還定義了一個在std名字空間的全局函數(shù),因為這個getline函數(shù)的參數(shù)使用了string字符串,所以聲明在了<string>頭文件中了。

  聲明如下:

  istream& getline ( istream& is, string& str, char delim );

  istream& getline ( istream& is, string& str );

  簡單的示例如下:

  void test2(){

  string line;

  while(getline(cin,line))

  cout<<line<<endl;

  }

  注意此處也是不讀入換行符的。

  所以在C++中讀取一行的函數(shù)是不讀入換行符的,而GCC中getline函數(shù)是讀入換行符的。可以理解為,一般情況下不讀入,特別的是GCC的讀入。

';

  return i;

  }

  復制代碼

  如果是文件結尾(c==EOF&&i==0)的話,我們就返回-1,通過判斷返回值是否為-1來決定是否繼續(xù)入輸入:

  復制代碼

  int test1(){

  char s[100];

  int len;

  while((len=getline2_(s,100))!=-1)

  printf("%s\n",s);

  return 0;

  }

  復制代碼

  這樣話就可以正確讀入所有的輸入了。

  在gcc編譯器中,對標準庫進行了擴展,加入了一個getline函數(shù)。該函數(shù)的定義如下:

  #include <stdio.h>

  ssize_t getline(char **lineptr, size_t *n, FILE *stream);

  其中*lineptr指向一個動態(tài)分配的內(nèi)存區(qū)域。*n是所分配內(nèi)存的長度。如果*lineptr是NULL的話,getline函數(shù)會自動進行動態(tài)內(nèi)存的分配(忽略*n的大小),所以使用這個函數(shù)非常注意的就使用要注意自己進行內(nèi)存的釋放。

  如果*lineptr分配了內(nèi)存,但在使用過程中發(fā)現(xiàn)所分配的內(nèi)存不足的話,getline函數(shù)會調(diào)用realloc函數(shù)來重新進行內(nèi)存的分配,同時更新*lineptr和*n。

  注意*lineptr指向的是一個動態(tài)分配的內(nèi)存,由malloc,calloc或realloc分配的,不能是靜態(tài)分配的數(shù)組。

  下面是使用這個函數(shù)情況,事先分配了動態(tài)內(nèi)存。

  復制代碼

  void test2(){

  int read;

  int len=100;

  char *line=NULL;

  if((line=malloc((len+1)))==NULL){

  printf("Can't get memory\n");

  exit(-1);

  }

  while((read=getline(&line,&len,stdin))!=-1)

  printf("%s\n",line);

  free(line);

  }

  復制代碼

  下面是一個沒有提前進行內(nèi)存分配的情況:

  復制代碼

  void test3(){

  int read;

  int len=0;

  char *line=NULL;

  while((read=getline(&line,&len,stdin))!=-1)

  printf("%s\n",line);

  free(line);

  }

  復制代碼

  同樣最后要進行內(nèi)存的釋放。

  這兒還要注意一個問題就是,getline函數(shù)讀入的一行是包括最后的換行符的。之前我們寫的函數(shù)是不包括這個的。下面我們進行修改一下,也讀入換行符。

  復制代碼

  int getline3_(char s[],int lim){

  int c,i;

  i=0;

  while((c=getchar())!=EOF&&c!='\n'&&i<lim-1)

  s[i++]=c;

  if(c==EOF&&i==0)

  return -1;

  if(c=='\n')

  s[i++]=c;

  s[i]='

c中getline的用法

時間: 長思709 分享

c中getline的用法

  下面小編就跟你們詳細介紹下c中getline的用法的用法,希望對你們有用。

  c中getline的用法的用法如下:

  getline函數(shù)是一個比較常見的函數(shù)。根據(jù)它的名字我們就可以知道這個函數(shù)是來完成讀入一行數(shù)據(jù)的。現(xiàn)在對getline函數(shù)進行一個總結。

  在標準C語言中,getline函數(shù)是不存在的。

  下面是一個簡單的實現(xiàn)方式:

  復制代碼

  int getline_(char s[],int lim){

  int c,i;

  i=0;

  while((c=getchar())!=EOF&&c!='\n'&&i<lim-1)

  s[i++]=c;

  s[i]='\0';

  return i;

  }

  復制代碼

  下面是一個簡單的測試程序:

  復制代碼

  int test1(){

  char s[100];

  int len;

  while((len=getline_(s,100))>0)

  printf("%s\n",s);

  return 0;

  }

  復制代碼

  但是這個實現(xiàn)是有問題的,就是遇到空行的時候也會停止的。

  為了解決這個問題,我們需要重新考慮while循環(huán)的判斷條件。

  在上面的實現(xiàn)中,我們是遇到EOF和換行'\n'的時候都停止 ,然后通過判斷所讀到的字符串的長度是否大于0來判斷是否結束。

  為了能讀入空行,我們需要判斷一下是否讀入的是結尾EOF,如果不是就繼續(xù)讀取就可以了。

  還有一點,EOF是什么?

  EOF是C語言中為了區(qū)分有效數(shù)據(jù)和輸入結束符的。

  C語言采用的解決辦法是:在沒有輸入時getchar函數(shù)將返回一個特殊值,這個特殊值與任何實際字符都不同。這個值成為EOF(end of file ,文件結束)。我們在聲明變量c 的時候,必須讓它大到足以存放getchar函數(shù)返回的任何值。之所以不把c聲明成char類型,是因為它必須足夠大,除了能存儲任何可能的字符外還要能存儲文件結束符EOF。

  EOF的輸入由系統(tǒng)鎖定。windows下是ctrl+z,linux/unix下是ctrl+d。

  下面是給出的修改后的getline函數(shù)

  復制代碼

  int getline2_(char s[],int lim){

  int c,i;

  i=0;

  while((c=getchar())!=EOF&&c!='\n'&&i<lim-1)

  s[i++]=c;

  if(c==EOF&&i==0)

  return -1;

  s[i]='\0';

  return i;

  }

  復制代碼

  如果是文件結尾(c==EOF&&i==0)的話,我們就返回-1,通過判斷返回值是否為-1來決定是否繼續(xù)入輸入:

  復制代碼

  int test1(){

  char s[100];

  int len;

  while((len=getline2_(s,100))!=-1)

  printf("%s\n",s);

  return 0;

  }

  復制代碼

  這樣話就可以正確讀入所有的輸入了。

  在gcc編譯器中,對標準庫進行了擴展,加入了一個getline函數(shù)。該函數(shù)的定義如下:

  #include <stdio.h>

  ssize_t getline(char **lineptr, size_t *n, FILE *stream);

  其中*lineptr指向一個動態(tài)分配的內(nèi)存區(qū)域。*n是所分配內(nèi)存的長度。如果*lineptr是NULL的話,getline函數(shù)會自動進行動態(tài)內(nèi)存的分配(忽略*n的大?。?,所以使用這個函數(shù)非常注意的就使用要注意自己進行內(nèi)存的釋放。

  如果*lineptr分配了內(nèi)存,但在使用過程中發(fā)現(xiàn)所分配的內(nèi)存不足的話,getline函數(shù)會調(diào)用realloc函數(shù)來重新進行內(nèi)存的分配,同時更新*lineptr和*n。

  注意*lineptr指向的是一個動態(tài)分配的內(nèi)存,由malloc,calloc或realloc分配的,不能是靜態(tài)分配的數(shù)組。

  下面是使用這個函數(shù)情況,事先分配了動態(tài)內(nèi)存。

  復制代碼

  void test2(){

  int read;

  int len=100;

  char *line=NULL;

  if((line=malloc((len+1)))==NULL){

  printf("Can't get memory\n");

  exit(-1);

  }

  while((read=getline(&line,&len,stdin))!=-1)

  printf("%s\n",line);

  free(line);

  }

  復制代碼

  下面是一個沒有提前進行內(nèi)存分配的情況:

  復制代碼

  void test3(){

  int read;

  int len=0;

  char *line=NULL;

  while((read=getline(&line,&len,stdin))!=-1)

  printf("%s\n",line);

  free(line);

  }

  復制代碼

  同樣最后要進行內(nèi)存的釋放。

  這兒還要注意一個問題就是,getline函數(shù)讀入的一行是包括最后的換行符的。之前我們寫的函數(shù)是不包括這個的。下面我們進行修改一下,也讀入換行符。

  復制代碼

  int getline3_(char s[],int lim){

  int c,i;

  i=0;

  while((c=getchar())!=EOF&&c!='\n'&&i<lim-1)

  s[i++]=c;

  if(c==EOF&&i==0)

  return -1;

  if(c=='\n')

  s[i++]=c;

  s[i]='\0';

  return i;

  }

  復制代碼

  這樣也讀入了換行符。這樣的話,這個getline函數(shù)就不錯了。

  在C++中為了使用的方便,C++在標準庫中添加了getline函數(shù)。

  其實在C++中對不同的輸入流對象都定義了一個getline函數(shù),即:

  std::fstream::getline

  std::istream::getline

  std::ifstream::getline

  std::iostream::getline

  std::wfstream::getline

  std::wistream::getline

  std::wifstream::getline

  std::wiostream::getline

  std::stringstream::getline

  std::basic_fstream::getline

  std::basic_istream::getline

  std::istringstream::getline

  std::wstringstream::getline

  std::basic_ifstream::getline

  std::basic_iostream::getline

  std::wistringstream::getline

  std::basic_stringstream::getline

  std::basic_istringstream::getline

  這兒我們討論標準輸入對象的getline函數(shù),其他的對象的情都是類似的。

  在頭文件<iostream>中聲明了getline函數(shù):

  istream::getline

  istream& getline (char* s, streamsize n );

  istream& getline (char* s, streamsize n, char delim );

  函數(shù)是C類型的數(shù)組。因為C++中允許對函數(shù)進行重載,所以可以有多個同名函數(shù)。delim參數(shù)是指定分隔符。如果不指定的話,默認使用'\n'

  下面是一個例子:

  void test1(){

  char line[100];

  while(cin.getline(line,100))

  cout<<line<<endl;

  }

  注意這兒的getline是要讀入空白符。但是不包括最后的換行符。

  C++中還定義了一個在std名字空間的全局函數(shù),因為這個getline函數(shù)的參數(shù)使用了string字符串,所以聲明在了<string>頭文件中了。

  聲明如下:

  istream& getline ( istream& is, string& str, char delim );

  istream& getline ( istream& is, string& str );

  簡單的示例如下:

  void test2(){

  string line;

  while(getline(cin,line))

  cout<<line<<endl;

  }

  注意此處也是不讀入換行符的。

  所以在C++中讀取一行的函數(shù)是不讀入換行符的,而GCC中getline函數(shù)是讀入換行符的??梢岳斫鉃?,一般情況下不讀入,特別的是GCC的讀入。

';

  return i;

  }

  復制代碼

  這樣也讀入了換行符。這樣的話,這個getline函數(shù)就不錯了。

  在C++中為了使用的方便,C++在標準庫中添加了getline函數(shù)。

  其實在C++中對不同的輸入流對象都定義了一個getline函數(shù),即:

  std::fstream::getline

  std::istream::getline

  std::ifstream::getline

  std::iostream::getline

  std::wfstream::getline

  std::wistream::getline

  std::wifstream::getline

  std::wiostream::getline

  std::stringstream::getline

  std::basic_fstream::getline

  std::basic_istream::getline

  std::istringstream::getline

  std::wstringstream::getline

  std::basic_ifstream::getline

  std::basic_iostream::getline

  std::wistringstream::getline

  std::basic_stringstream::getline

  std::basic_istringstream::getline

  這兒我們討論標準輸入對象的getline函數(shù),其他的對象的情都是類似的。

  在頭文件<iostream>中聲明了getline函數(shù):

  istream::getline

  istream& getline (char* s, streamsize n );

  istream& getline (char* s, streamsize n, char delim );

  函數(shù)是C類型的數(shù)組。因為C++中允許對函數(shù)進行重載,所以可以有多個同名函數(shù)。delim參數(shù)是指定分隔符。如果不指定的話,默認使用'\n'

  下面是一個例子:

  void test1(){

  char line[100];

  while(cin.getline(line,100))

  cout<<line<<endl;

  }

  注意這兒的getline是要讀入空白符。但是不包括最后的換行符。

  C++中還定義了一個在std名字空間的全局函數(shù),因為這個getline函數(shù)的參數(shù)使用了string字符串,所以聲明在了<string>頭文件中了。

  聲明如下:

  istream& getline ( istream& is, string& str, char delim );

  istream& getline ( istream& is, string& str );

  簡單的示例如下:

  void test2(){

  string line;

  while(getline(cin,line))

  cout<<line<<endl;

  }

  注意此處也是不讀入換行符的。

  所以在C++中讀取一行的函數(shù)是不讀入換行符的,而GCC中getline函數(shù)是讀入換行符的??梢岳斫鉃椋话闱闆r下不讀入,特別的是GCC的讀入。

熱門文章

537179