-1

以下のプログラムを実行してファイルの名前を入力すると、ファイルが読み取られないようです。どこで探せばいいのかわからないからでしょうか?また、ファイル内の行数を返す関数は、表示されるメモリアドレスのみを返します。

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

using namespace std;

入力されたtxtファイルの文字数を返す関数:

int return_Characters(ifstream& in) 
{
    int characters = in.gcount();

    return characters;
}

txt ファイルの行数を取得し、その数を double として返すと想定される関数:

double return_lines(ifstream& in) 
{
    string name;
    double lines = 0;

    while(getline(in, name) ){
        int count = 0;
        lines = count++;
    }

    return lines;
}

主な機能:

int main() 
{
    string file_name;
    ifstream input_file;


    cout << "Please enter the name of your file" << endl;

ユーザーが入力した file_name 文字列を読み取り、関数を実行して、ユーザーが入力した txt ファイルの文字数と行数を取得するループを実行します。

    do {
        getline(cin, file_name);
        cout << "checking" << ' ' << file_name << endl;

        input_file.open(file_name);

        int count_characters = return_Characters(input_file);
        cout << "the number of characters is equal to " << count_characters << '\n';

        double count_lines = return_lines(input_file);
        cout << "the number of lines in the file is equal to" << return_lines << '\n';

        input_file.close();

    }while(!file_name.empty());

    cout << "there was an error oepning your file. The program will not exit" << endl;


    system("Pause");
    return 0;
}
4

2 に答える 2

2

関数では、ループ内でローカル変数になるようにreturn_lines宣言します。countこれは、反復ごとに常にゼロにリセットされることを意味し、常にゼロlinesに設定されることにもつながります。

もう1つの問題は、istream::gcount関数が最後の入力操作から読み取った文字数のみを返し、入力を行わないため、常にゼロを返すことです。

また、行数にa を使用する理由はありませdoubleん。たとえば、ファイル内で 12.3 行を使用することはありません。を使用しintます。


ファイル操作が成功することも確認する必要があります。で正しく実行してreturn_linesいる間、ファイルのオープンが成功したかどうかを確認しません。

于 2013-06-15T08:35:54.540 に答える
2

この関数は、あなたが説明したことをしません。「最新の読み取り操作で読み取られた文字数を返します(たとえばin.getline()、そうすると、この行はその行の長さを返します)。

int return_Characters(ifstream& in) { int characters = in.gcount();

    return characters;
}

ファイルのサイズを調べるには、最後までシークし、位置を取得してから、最初にシークする必要があります。これは特定のシステムのテキスト ファイルでは信頼できませんがnewline、ファイル内の は 2 バイトであり、C では「1 文字」としてカウントされるためです。ファイル内の文字と行数をカウントする場合は、その数をカウントします。各行の文字数(return_lines読み取られる文字数のパラメーターも取得します)。

于 2013-06-15T08:39:51.670 に答える