2017-02-05 70 views
1
template <class T> 
void savetext(T *a, char const *b) //writes to text file inside .sln however the text file is corrupt 
{ 
    ofstream fout(b, ios::out); 
    for (int i = 0; a[i] != '\0'; i++) 
     fout << a[i] << endl; 
    cout << "Text file successfully written to." << endl; 
} 

template <class T> 
void gettext(T *a, char const *b) //this is where the error occurs: inside the text file it puts the right values along with piles of junk. Why is this? 
{ 

    ifstream fin(b, ios::in); 
    if (fin.is_open()) 
    { 
    cout << "File opened. Now displaying .txt data..." << endl; 
     for (int i = 0; a[i]!= '\0'; i++) 
     { 
      fin >> a[i]; 
     } 
     cout << "Data successfully read." << endl; 
    } 
    else 
    { 
     cout << "File could not be opened." << endl; 
    } 
} 

int main() 
{ 
    const int n1 = 5, n2 = 7, n3 = 6; 
    int a[n1], x, y, z; 
    float b[n2] = {}; 
    char c[n3] = ""; 

    //Begin writing files to text files which I name herein. 
    cout << "Writing data to text 3 text files." << endl; 
    savetext(a, "integer.txt"); 
    savetext(b, "float.txt"); 
    savetext(c, "string.txt"); 
    cout << endl; 

    //Retrieve the text in the files and display them on console to prove that they work. 
    cout << "Now reading files, bitch!" << endl; 
    gettext(a, "integer.txt"); 
    gettext(b, "float.txt"); 
    gettext(c, "string.txt"); 
    cout << endl; 

    return 0; 

system("PAUSE"); 
} 

Здравствуйте, и добрый вечер. У меня есть программа на C++, которая в настоящее время записывает данные (целое число, поплавки и символы) в 3 отдельных текстовых файла. Однако, когда он записывает данные в текстовые файлы, происходят две вещи: данные находятся внутри текстового файла, но так же есть куча текста непонятного крыла, а также большие числа и большие отрицательные числа - данные, которые я никогда не вводил.данные, записанные в текстовый файл, являются частично коррумпированными и безвозвратными

В результате этого Я не могу получить информацию из текстового файла, и я не могу отобразить информацию о текстовом файле. Как решить эту проблему? Спасибо.

+0

Использует std :: vector вместо статического массива ok для этого? Если ваша программа считывает переменное количество байтов из файла, динамически назначенный контейнер (например, std :: vector) лучше, чем статический массив, который может содержать только фиксированное количество байтов. Поскольку размер файла может быть больше, чем доступная память, обработка файла по мере чтения с жесткого диска - хорошая идея. Этот способ позволяет избежать одновременного хранения всех данных из файла в память. Также нужно подумать о кодировке endianness и unicode, если вы делаете кросс-платформу. –

ответ

0

Ваша первая проблема заключается в том, что вы пишете неинициализированные данные в свои файлы.

+0

Hm. У меня создалось впечатление, что я инициализировал их в 'main()' did not not? 'char c [n3] =" ";', 'float b [n2] = {};' и 'int a [n1], x, y, z;' не являются инициализациями? Если это не так, где и что мне делать? Спасибо, Rich. – ZoeVillanova

+0

Строка «пустая», что означает, что первый символ равен \ 0. Я не помню, но я думаю, что вам нужно значение в фигурных скобках для b, чтобы иметь инициализированное значение. Однако a, x, y и z все неинициализируются. – Rich

+0

Измените свою функцию, чтобы использовать cout вместо потока файлов и посмотреть, что вы получаете. – Rich