0

我正在尝试将文件中的所有字符读入数组。假设所有变量都被声明,为什么所有字符都没有被读入我的数组。当我输出“storeCharacters[]”数组中的一些字符时,会返回垃圾。请帮忙。

这是我的功能:

void countChars(ifstream& input, char storeCharacters[])
{
int i = 0;
    while( !input.eof() )
    {
        input.get(storeCharacters[i]);
        i++;
    }
}
4

3 回答 3

2

在 while 循环之后尝试添加storeCharacters[i] = '\0'到 null 终止字符串。

于 2013-04-24T18:35:15.200 回答
0
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <cstdlib>


using namespace std;


void getFileName(ifstream& input, ofstream& output)  //gets filename
{
string fileName;

cout << "Enter the file name: ";
cin >> fileName;
input.open(fileName.c_str());   
if( !input )
    {
        cout << "Incorrect File Path" << endl;
        exit (0);
    }
output.open("c:\\users\\jacob\\desktop\\thomannProj3Results.txt");
}

void countWords(ifstream& input)  //counts words
{
bool notTrue = false;
string words;
int i = 0;

while( notTrue == false )
{
    if( input >> words )
    {
        i++;
    }
    else if( !(input >> words) )
        notTrue = true;
}
cout << "There are " << i << " words in the file." << endl;
}

void countChars(ifstream& input, char storeCharacters[], ofstream& output)  // counts characters
{
int i = 0;

        while( input.good() && !input.eof() )
        {
                input.get(storeCharacters[i]);
                i++;
        }
        output << storeCharacters[0];
}

void sortChars()  //sorts characters
{
}

void printCount()  //prints characters
{
}

int main()
{

ifstream input;
ofstream output;

char storeCharacters[1000] = {0};

getFileName(input, output);
countWords(input);
countChars(input, storeCharacters, output);

return 0;
}
于 2013-04-26T00:10:30.560 回答
0

如果您知道文件的最大大小,则可以轻松解决您的问题,然后只需将数组设置为具有该大小并使用\0.

假设您的文件中的最大字符数是10000.

#define DEFAULT_SIZE 10000
char  storeCharacters[DEFAULT_SIZE];
memset (storeCharacters,'\0',DEFAULT_SIZE) ;

下面的帖子应该是使用缓冲区读取文件的正确方法,它具有内存分配以及您需要知道的所有内容:

将文本文件读入 C 中的缓冲区的正确方法?

于 2013-04-24T20:36:19.110 回答