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

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

Восстановить пароль Регистрация
 
NinGAZ
13 / 13 / 1
Регистрация: 27.07.2011
Сообщений: 162
02.08.2012, 17:00     Считывание в файл #1
Всем привет. Сегодня столкнулся с проблемой. Программа делает 4 действия: рандомой забивает числа в файл,затем считывает их в массив,сортирует его и записывает его в новый файл. Все делается,но в массив считывается только 8192 числа(из 10000,как должно быть). Нигде не встречал такого,объясните с чем это связано.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2012, 17:00     Считывание в файл
Посмотрите здесь:

Считывание и запись матрицы из/в файл C++
Считывание и запись в файл C++
Считывание строк в файл C++
C++ Считывание и запись в файл
C++ считывание и запись в файл
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cybersonner
 Аватар для cybersonner
97 / 48 / 3
Регистрация: 24.12.2011
Сообщений: 101
02.08.2012, 17:09     Считывание в файл #2
*telepat mode on*
скорее всего ограничение связано с используемым типом данных в переменной, отвечающей за количество или индекс числа.
8192*4(размер int)=32768 (максимальное значение для unsigned short)
*telepat mode off*
видя исходники было бы проще.
NinGAZ
13 / 13 / 1
Регистрация: 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;
    
}
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
02.08.2012, 17:35     Считывание в файл #4
Откуда вы узнали, что их именно столько? Считали вручную?
NinGAZ
13 / 13 / 1
Регистрация: 27.07.2011
Сообщений: 162
02.08.2012, 17:41  [ТС]     Считывание в файл #5
а как же иначе? сидел,высчитывал...) а если внимательнее читали код,то поняли бы. там есть проверка. числа генерируются от 100 до 999,массив инициализируется 0,вот и подсчет. почему в массив считывается 8192 числа,а не 10к - вопрос.
Intel~lect
 Аватар для Intel~lect
135 / 124 / 2
Регистрация: 03.07.2012
Сообщений: 355
02.08.2012, 17:49     Считывание в файл #6
NinGAZ, Сделайте две проверки количества чисел. Когда записываете в файл и когда считываете из файла.
Так будет легче понять в каком месте ошибка
NinGAZ
13 / 13 / 1
Регистрация: 27.07.2011
Сообщений: 162
02.08.2012, 20:13  [ТС]     Считывание в файл #7
в файл пишется 10к чисел,считывается 8192. Там и так сделаны проверки,я даже знаю в каком месте утечка,но не понимаю из-за чего... возможности языка,разрядности или руки...

Добавлено через 2 часа 16 минут
Итак,при проведении ряда опытов стало ясно следующее: переполняется буфер. если числа будут двузначными,то мы приблизимся к ~9,5к,но этого мало. так же на более мощной машине результат больше,но не 10к чисел. всем спасибо,вопрос решен.
-=ЮрА=-
Заблокирован
Автор 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;
}
Миниатюры
Считывание в файл  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2012, 21:52     Считывание в файл
Еще ссылки по теме:

C++ Считывание и запись в файл
Считывание посимвольно файл C++
C++ Запись/считывание vector в/из файл

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

Или воспользуйтесь поиском по форуму:
NinGAZ
13 / 13 / 1
Регистрация: 27.07.2011
Сообщений: 162
02.08.2012, 21:52  [ТС]     Считывание в файл #9
-=ЮрА=-, спасибо,я и не думал,что из-за этого может быть. очень доходчиво,особенно код.
Yandex
Объявления
02.08.2012, 21:52     Считывание в файл
Ответ Создать тему
Опции темы

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