get()在C ++片段中的重要性

时间:2017-08-17 17:05:53

标签: c++ file get file-handling read-write

这是与file handling相关的问题,我们将数据输入到文件然后显示其内容。我无法理解行cin.get(ch);如何帮助输出。我发现如果从代码中删除这一行,程序将无法在第二次迭代中获取变量标记的输入。为什么会这样?我对get()的工作感到有些困惑。我的代码:

 #include<iostream>
 #include<conio>
 #include<fstream>
 int main()
 {

  ofstream fout;
  fout.open("student",ios::out);
  char name[30],ch;
  float marks=0.0;
  for(int i=0;i<5;i++)
  {
   cout<<"Student "<<(i+1)<<":\t Name:";
   cin.get(name,30);
   cout<<"\t\t Marks: ";
   cin>>marks;
   cin.get(ch); **// the confusion is in this line**
   fout<<name<<"\n"<<marks<<"\n";
  }
  fout.close();
  ifstream fin;
  fin.open("student",ios::in);
  fin.seekg(0);
  cout<<"\n";
  for(i=0;i<5;i++)
  {
   fin.get(name,30);
   fin.get(ch);
   fin>>marks;
   fin.get(ch);
   cout<<"Student Name: "<<name;
   cout<<"\t Marks: "<<marks<<"\n";
  }
  fin.close();
  return 0;
}

1 个答案:

答案 0 :(得分:1)

从功能描述

basic_istream<charT,traits>& get(char_type* s, streamsize n,
char_type delim );

在C ++标准中:

  

提取并存储字符,直到出现以下任何一种情况:   ...

     

- traits :: eq(c,delim)表示下一个可用的输入字符c( in   哪个案例c未被提取)。

从功能描述

basic_istream<charT,traits>& get(char_type* s, streamsize n);
  

效果:调用get(s,n,widen('\ n'))

因此这个电话

cin.get(ch); 

用于从输入缓冲区中提取新行字符。否则下一次调用函数

cin.get(name,30);

将读取一个空字符串。

而不是电话

cin.get(ch); 

您可以使用成员函数ignore

的调用