2017-08-17 39 views
-4

這是一個與file handling有關的問題,我們將數據輸入到文件中,然後顯示其內容。我無法理解行cin.get(ch);如何幫助輸出。我發現如果我從代碼中刪除這一行,程序將無法在第二次迭代中爲變量標記獲取輸入。爲什麼這樣?我在這裏工作get()有點困惑。我的代碼:get()在C++代碼片段中的含義

#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; 
} 
+0

也許有一個調用來讀取換行符是在輸入緩衝區中的前輸入之後呢? –

+0

輸入是怎樣的? – user0042

+0

使用'std :: string',然後從流中讀取正常的'cin >> name'。反正'cin.get(ch)'的目的是什麼?請提供投入和預期產出。 – AndyG

回答

1

從功能

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

在C++標準的描述:

字符被提取並存儲直到任何下列情況發生: ...

- traits :: eq(c,delim)爲下一個可用的輸入字符c(i n 哪個案例c不被提取)。

,在功能

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

影響的描述:調用get(S,N,拓寬( '\ n'))

因此這個調用

cin.get(ch); 

用於從i中提取新的行字符輸入緩衝區。否則,下一次調用該函數

cin.get(name,30); 

將讀取一個空字符串。

不是呼叫

cin.get(ch); 

你可以使用成員函數ignore