14 / 14 / 4
Регистрация: 27.07.2011
Сообщений: 162
1

Считывание в файл

02.08.2012, 17:00. Показов 727. Ответов 8
Метки нет (Все метки)

Всем привет. Сегодня столкнулся с проблемой. Программа делает 4 действия: рандомой забивает числа в файл,затем считывает их в массив,сортирует его и записывает его в новый файл. Все делается,но в массив считывается только 8192 числа(из 10000,как должно быть). Нигде не встречал такого,объясните с чем это связано.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.08.2012, 17:00
Ответы с готовыми решениями:

Считывание и запись в файл
В Си. В файле data.txt даны квадратная матрица A и вектор X, соответствующих размерностей. Написать...

Считывание и запись в файл
Здравствуйте! Опишите как считать информацию а потом записать ее в файл на примере: Тоесть...

считывание и запись в файл
вот написал программу на C++ builder в консоли, считывающую два числа и записывающую в файл их...

Построчное считывание в файл
Все записывается в одну строку , как сделать так чтобы записывалось в отдельные строки? void...

8
98 / 49 / 4
Регистрация: 24.12.2011
Сообщений: 101
02.08.2012, 17:09 2
*telepat mode on*
скорее всего ограничение связано с используемым типом данных в переменной, отвечающей за количество или индекс числа.
8192*4(размер int)=32768 (максимальное значение для unsigned short)
*telepat mode off*
видя исходники было бы проще.
1
14 / 14 / 4
Регистрация: 27.07.2011
Сообщений: 162
02.08.2012, 17:19  [ТС] 3
в том-то и дело,что нет никакой индексной переменной. А что касаемо 8192,то очень удивило,знаю про 32768.

Надо было сразу исходники выложить,согласен.

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
#include <iostream>
#include <fstream>
#include <time.h>
#include <stdlib.h>
using namespace std;
 
int main()
{
    srand(time(NULL));
    ofstream fout("numbers.txt");
    ofstream fout_sort("numbers_sort.txt");
    ofstream fout_a("num.txt");
    ifstream fin("numbers.txt");
    int i,num=0;
    int array[10000];
    
    if(!fout.is_open())
        cout << "don`t write...";
    else
        for(i=0;i<10000;i++)  //заполнение файла и инициализация массива
        {
            fout << 100 + rand()%900 << " ";
            array[i]=0;
            
        }
    
    if(!fin.is_open())
        cout << "don`t read...";
    else
        for(i=0;i<10000;i++) 
        {
            fin >> array[i];      //считывание в массив
            if(array[i]!=0)
                num++;
        }
    cout << "numbers in array: " << num;
    num=0;
    
    for(i=0;i<10000;i++)
    {
            fout_a << array[i] << " ";   //считывание из массива в файл(тут как раз вместо 10к чисел их всего 8192,остальные "0").
            if(array[i]!=0)
                num++;
    }
    
    cout << "\nnumbers in array: " << num;
    for(i=1;i<10000;i++)          //сортировка массива
        for(int j=0;j<10000-i;j++)
            if(array[j]>array[j+1])
            {
                int tmp=array[j];
                array[j]=array[j+1];
                array[j+1]=tmp;
            }
        for(i=0;i<10000;i++)
            fout_sort << array[i] << " ";
    return 0;
    
}
0
Эксперт С++
516 / 420 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
02.08.2012, 17:35 4
Откуда вы узнали, что их именно столько? Считали вручную?
1
14 / 14 / 4
Регистрация: 27.07.2011
Сообщений: 162
02.08.2012, 17:41  [ТС] 5
а как же иначе? сидел,высчитывал...) а если внимательнее читали код,то поняли бы. там есть проверка. числа генерируются от 100 до 999,массив инициализируется 0,вот и подсчет. почему в массив считывается 8192 числа,а не 10к - вопрос.
0
137 / 126 / 14
Регистрация: 03.07.2012
Сообщений: 355
02.08.2012, 17:49 6
NinGAZ, Сделайте две проверки количества чисел. Когда записываете в файл и когда считываете из файла.
Так будет легче понять в каком месте ошибка
1
14 / 14 / 4
Регистрация: 27.07.2011
Сообщений: 162
02.08.2012, 20:13  [ТС] 7
в файл пишется 10к чисел,считывается 8192. Там и так сделаны проверки,я даже знаю в каком месте утечка,но не понимаю из-за чего... возможности языка,разрядности или руки...

Добавлено через 2 часа 16 минут
Итак,при проведении ряда опытов стало ясно следующее: переполняется буфер. если числа будут двузначными,то мы приблизимся к ~9,5к,но этого мало. так же на более мощной машине результат больше,но не 10к чисел. всем спасибо,вопрос решен.
0
Заблокирован
Автор FAQ
02.08.2012, 20:34 8
Цитата Сообщение от NinGAZ Посмотреть сообщение
ofstream fout("numbers.txt");
Цитата Сообщение от NinGAZ Посмотреть сообщение
ifstream fin("numbers.txt");
- сразу конфликт двух потоков думаю от этого все проблеммы и шли. Не луше ли было сделать вот так ifstream fin; а когда файл записывался делать fin.open("numbers.txt"). Кстати нигде не нашёл игде ofs.close() - это кто сказал что его не надо писать?

Добавлено через 10 минут
NinGAZ, вот и вся твоя задача - всё пишется и итается ровно 10000 раз
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
#include <ctime>
#include <fstream>
#include <iostream>
using namespace std;
 
#define N 10000
 
int main()
{
    int i, j;
    int nCount   = 0;
    int array[N] = {0};
    srand(time(0));
    ofstream ofs;
    ifstream ifs;
    ofs.open("numbers.txt");
    if(!ofs.is_open())
        cout<<"Error create numbers.txt\n";
    else
    {
        for(i = 0; i < N; i++)
            ofs<<100 + rand()%900<<" ";
        ofs.close();
    }
    ifs.open("numbers.txt");
    if(!ifs.is_open())
        cout<<"Error open numbers.txt\n";
    else
    {
        for(i = 0; !ifs.eof() && i < N; i++)
        {
            if(ifs>>array[i])
            {
                nCount++;
                cout<<i<<" - "<<array[i]<<endl;
            }
        }
        ifs.close();
        cout<<"Read count : "<<nCount<<endl;
        system("pause");
        cout<<"Sorting...\n";
        for(i = 0    ; i < nCount; i++)
        for(j = i + 1; j < nCount; j++)
        {
            if(array[j] < array[i])
            {
                array[i] = array[i] + array[j];
                array[j] = array[i] - array[j];
                array[i] = array[i] - array[j];
            }
        }
        ofs.open("numbersSort.txt");
        if(!ofs.is_open())
            cout<<"Error create numbersSort.txt\n";
        else
        {
            for(i = 0; i < nCount; i++)
            {
                ofs<<array[i]<<" ";
                cout<<i + 1<<" - "<<array[i]<<endl;
            }
            ofs.close();
        }
    }
    system("pause");
    return 0;
}
Миниатюры
Считывание в файл  
1
14 / 14 / 4
Регистрация: 27.07.2011
Сообщений: 162
02.08.2012, 21:52  [ТС] 9
-=ЮрА=-, спасибо,я и не думал,что из-за этого может быть. очень доходчиво,особенно код.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.08.2012, 21:52
Помогаю со студенческими работами здесь

Считывание и запись в файл
Короче пытаюсь считать из одного файла цифру и записать ее в другой файл На то что после // не...

Считывание строк в файл
Здравствуйте,очень нужна помощь.Есть данный код,не могу понять как его переделать из посимвольного...

Считывание и запись в файл
Мне подсказали здесь на форуме как красиво считать из файла в переменную FilenameST = &quot;C:\12.html&quot;...

Запись в файл и считывание
Доброго времени суток!! У мене возник такой вопрос: у меня есть тип :inf= record ...

Считывание и запись в файл
решил задачу на с, го её нужно перевести на с++. у меня возникли проблемы с считыванием и записью в...

Считывание посимвольно файл
Нужно считать посимвольно файл, но когда начал реализовать, то запутался, мне в цикле надо иметь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru