Форум программистов, компьютерный форум CyberForum.ru

Работа с файлами(открыть файл, считать данные в double массив) - C++

Восстановить пароль Регистрация
 
revo1t
28 / 8 / 1
Регистрация: 14.03.2013
Сообщений: 43
05.05.2014, 11:33     Работа с файлами(открыть файл, считать данные в double массив) #1
Доброго времени суток всем!
Столкнулся с проблемой при написании проги.
Вот что требуется:
1)Открыть файл
2)Считать данные в массив (массив double)
3)Закрыть файл

Что сделано на данный момент:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
#include<fstream>
#include<windows.h>
 
...
 
void openFileInput(){
     string line = NULL;
     fstream file;
     file.open("input.txt");
     if(file.is_open()){
         while(file.good()){
             getline(file,line);
          }
     }
     file.close();
}
З.Ы Если есть возможность, опишите подробно , поскольку потом надо бует записать массив в файл.. но это уже другая история.
З.Ы.Ы Есть вариант легче/эффективней?
Заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.05.2014, 11:33     Работа с файлами(открыть файл, считать данные в double массив)
Посмотрите здесь:

Считать числа типа double из файла и записать их в массив C++
Открыть файл по структуре и вытащить данные C++
Объединить упорядоченные файлы не нарушая упорядоченности C++
Работа с файлами (считать очередь, вывести на экран, дополнить ее элементами и перезаписать в фай) C++
C++ Считать данные с сокета в массив
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aiwprton805
 Аватар для aiwprton805
64 / 64 / 23
Регистрация: 30.03.2013
Сообщений: 178
Завершенные тесты: 1
05.05.2014, 13:28     Работа с файлами(открыть файл, считать данные в double массив) #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <iostream>
#include <fstream>
#include <conio.h>
#include <locale>
 
using namespace std;
 
double *read(char *, int *);
void write(char *, double *, int);
double *genArray(int);
void showArray(double *, int);
 
 
int main(int argc, char *argv[])
{
    setlocale(LC_ALL, "rus");
    int size;
    cout << "Введите размер массива" << endl;
    cin >> size;
    double *arr = genArray(size);
    cout << "Сгенерирован следующий массив:" << endl;
    showArray(arr, size);
    char buff[256];
    cout << "Введите имя файла для записи массива" << endl;
    fflush(stdin);
    gets(buff);
    write(buff, arr, size);
    cout << "Введите имя файла для чтения массива" << endl;
    fflush(stdin);
    gets(buff);
    arr = read(buff, &size);
    cout << "Из файла прочтён следующий массив:" << endl;
    showArray(arr, size);
    cout << "Для продолжения нажмите любую клавишу . . ." << endl;
    getch();
    return 0;
}
 
double *read(char *filename, int *size)
{
    double *arr = NULL;
    double *tmp;
    *size = 0;
    ifstream infile;
    infile.open(filename);
    while(!infile.eof()){
        tmp = new double[*size+1];
        for(int i=0; i<*size; i++){
            tmp[i] = arr[i];}
        delete [] arr;
        arr = tmp;
        infile >> arr[*size];
        (*size)++;}
    infile.close();
    return arr;
}
 
void write(char *filename, double *arr, int size)
{
    ofstream outfile(filename);
    for(int i=0; i<size-1; i++){
        outfile << arr[i] << ' ';}
    outfile << arr[size-1];
    outfile.close();
}
 
double *genArray(int size)
{
    double *arr = new double[size];
    srand(time(NULL));
    for(int i=0; i<size; i++){
        arr[i] = (double)(rand()%1000);
        arr[i] /= rand()%100 * ((rand()%2) ? 1 : -1);}
    return arr;
}
 
void showArray(double *arr, int size)
{
    for(int i=0; i<size; i++){
        cout << arr[i] << ' ';}
    cout << endl;
}
revo1t
28 / 8 / 1
Регистрация: 14.03.2013
Сообщений: 43
05.05.2014, 14:57  [ТС]     Работа с файлами(открыть файл, считать данные в double массив) #3
Цитата Сообщение от aiwprton805 Посмотреть сообщение
cout << "Введите имя файла для чтения массива" << endl;
fflush(stdin);
gets(buff);
arr = read(buff, &size);
Здесь возникает ошибка. Он просто не хочет идти дальше.
Была ошибка c "gets"(CRT_NO_SECURE_WARNINGS), И всё равно нехочет идти дальше
aiwprton805
 Аватар для aiwprton805
64 / 64 / 23
Регистрация: 30.03.2013
Сообщений: 178
Завершенные тесты: 1
05.05.2014, 15:22     Работа с файлами(открыть файл, считать данные в double массив) #4
Странно, у меня работает (в Visual Studio 2012)
[]http://i6.pixs.ru/thumbs/7/8/1/SnimokJPG_1260822_11979781.jpg[/]
Когда создаёте проект консольного приложения в параметрах приложения снимите галочки Предварительно скомпилированный заголовок и Проверка жизненного цикла разработки безопасного ПО (SDL) и установите галочку Пустой проект. А файл, содержащий main потом создадите.
revo1t
28 / 8 / 1
Регистрация: 14.03.2013
Сообщений: 43
05.05.2014, 16:46  [ТС]     Работа с файлами(открыть файл, считать данные в double массив) #5
Цитата Сообщение от aiwprton805 Посмотреть сообщение
Когда создаёте проект консольного приложения в параметрах приложения снимите галочки Предварительно скомпилированный заголовок и Проверка жизненного цикла разработки безопасного ПО (SDL) и установите галочку Пустой проект. А файл, содержащий main потом создадите.
именно так я и делаю постоянно.
У меня тоже стоит VS 2012

Добавлено через 4 минуты
всё. понял я указывал имя файла без расширения

детская ошибка
Yandex
Объявления
05.05.2014, 16:46     Работа с файлами(открыть файл, считать данные в double массив)
Ответ Создать тему
Опции темы

Текущее время: 00:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru