2017-11-18 2 views
-1

のために働いていない私は、コードブロックに次のコードを書いて、私はプログラミングに新しいですので、私は簡単な言葉で問題を知っていただきたいと思います。 open()コンストラクタが存在しない場合、新しいファイルを作成しますか?GET()関数は++ファイル

#include<iostream> 
#include<fstream> 
#include<cstring> 
using namespace std; 
int main() 
{ 
    char str[80]; 
    cout<<"Enter a string : ";cin>>str; 
    int len=strlen(str); 
    fstream file; 
    file.open("TEXT",ios::in|ios::out); 
    for(int i=0;i<len;i++) 
    file.put(str[i]); 
    file.seekg(0); 
    char ch; 
    cout<<"\nPrintitng Contents....\n"; 
    int k=0; 
    while(file) 
    { 
    file.seekg(k); 
    file.get(ch); 
    cout<<ch; 
    k++; 
    } 

    return 0; 
} 
+0

のようにコードを改善できますか?あなたはどんな結果を期待していますか、何を観察していますか?その2つの違いは何ですか? –

+3

ストリームの状態を決してチェックしていないのを見て、ファイルが開かれているかどうか確かめてください。 – user4581301

+0

可能であれば、* std :: stringを使用してください。ランダムな長さのCスタイルの文字配列ではありません。 – tadman

答えて

-1

次のコードは、私はあなたが "TEXT" を持っていないと思う

#include<iostream> 
#include<fstream> 
#include<string> 
using namespace std; 
int main() 
{ 
    string str; 
    string newStr; 
    cout << "Enter a string : "; cin >> str; 
    int len = str.length(); 
    fstream file; 
    file.open("TEXT", ios::out| ios::in); 
    if (!file.is_open()) 
     return 0; 
    file << str; 
    file.seekg(0,file.beg); 
    char ch; 
    cout << "\nPrintitng Contents....\n"; 

    file >> newStr; 
    cout << newStr; 
    file.close(); 

    return 0; 
} 
+0

、しかしがアスカーのエラーを繰り返し、 – user4581301

0

思い++ Cのためのより適切です。 fstream :: openは、読み込みたいファイルが存在しない場合にファイルを作成しません。

ますので、読み書きに別のストリームにしようとします。

次のコードを参考にしてください。

#include<iostream> 
#include<fstream> 
#include<cstring> 

using namespace std; 

int main() 
{ 
    char str[80]; 
    cout << "Enter a string : "; 
    cin >> str; 
    int len = strlen(str); 

    ofstream fout; 
    fout.open("TEXT.txt"); 

    for (int i = 0; i<len; i++) 
     fout.put(str[i]); 

    fout.close(); 

    ifstream fin; 
    fin.open("TEXT.txt"); 

    char ch; 
    cout << "\nPrintitng Contents....\n"; 

    while (!fin.eof()) 
    { 
     fin.get(ch); 
     cout << ch; 
     ch = NULL; 
    } 

    fin.close(); 

    return 0; 
} 

とあなたは問題があると考えていますこれは何

#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 

int main() 
{ 
    string str; 

    cout << "Enter a string : "; 
    cin >> str; 

    ofstream fout; 
    fout.open("TEXT.txt"); 

    fout << str; 

    fout.close(); 

    str.clear(); 

    ifstream fin; 
    fin.open("TEXT.txt"); 

    cout << "\nPrintitng Contents....\n"; 

    fin >> str; 
    cout << str; 

    fin.close(); 

    return 0; 
} 
+0

がほぼ正確に右の問題を解決していませんが、あなたが与える必要がある[なぜあるのiostream :: eofの間違った考えられてループ条件の内側?](https://でのstackoverflow .com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-consider-wrong)を読んで素早く修正する。 – user4581301

+0

iostream :: eof cursurがファイルの終わりに達するとtrueを返し、それ以外の場合はfalseを返します。したがって、ファイルの終わりではなくループがループし続けるようにします。 –

+0

2番目の方法はC++で行う正しい方法ですが、while(!fin.eof())の大きな問題は、eofを読み込んでeofを見つける前にテストすることです。 'fin.seekg(k);'または 'fin.get(ch);'はeofを見つけることを含む何らかの理由で失敗する可能性があり、 'ch'がまだ使用されている可能性があります。さらに、ファイルの終わりに達する前に読み取りが失敗した場合、ファイルの最後に到達することはないため、無限ループになります。 – user4581301

関連する問題