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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
NinGAZ
14 / 14 / 1
Регистрация: 27.07.2011
Сообщений: 162
#1

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

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

Всем привет. Сегодня столкнулся с проблемой. Программа делает 4 действия: рандомой забивает числа в файл,затем считывает их в массив,сортирует его и записывает его в новый файл. Все делается,но в массив считывается только 8192 числа(из 10000,как должно быть). Нигде не встречал такого,объясните с чем это связано.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2012, 17:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Считывание в файл (C++):

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

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

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

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

Построчное считывание в файл - C++
Все записывается в одну строку , как сделать так чтобы записывалось в отдельные строки? void enter_new() { cout <<...

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

8
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*
видя исходники было бы проще.
1
NinGAZ
14 / 14 / 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;
    
}
0
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
02.08.2012, 17:35 #4
Откуда вы узнали, что их именно столько? Считали вручную?
1
NinGAZ
14 / 14 / 1
Регистрация: 27.07.2011
Сообщений: 162
02.08.2012, 17:41  [ТС] #5
а как же иначе? сидел,высчитывал...) а если внимательнее читали код,то поняли бы. там есть проверка. числа генерируются от 100 до 999,массив инициализируется 0,вот и подсчет. почему в массив считывается 8192 числа,а не 10к - вопрос.
0
Intel~lect
135 / 124 / 2
Регистрация: 03.07.2012
Сообщений: 355
02.08.2012, 17:49 #6
NinGAZ, Сделайте две проверки количества чисел. Когда записываете в файл и когда считываете из файла.
Так будет легче понять в каком месте ошибка
1
NinGAZ
14 / 14 / 1
Регистрация: 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
Миниатюры
Считывание в файл  
NinGAZ
14 / 14 / 1
Регистрация: 27.07.2011
Сообщений: 162
02.08.2012, 21:52  [ТС] #9
-=ЮрА=-, спасибо,я и не думал,что из-за этого может быть. очень доходчиво,особенно код.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2012, 21:52
Привет! Вот еще темы с ответами:

Считывание и запись в файл - C++
Короче пытаюсь считать из одного файла цифру и записать ее в другой файл На то что после // не обращайте внимания эт я для себя писал))) ...

Запись в файл и его считывание - C++
Добрый вечер,помогите с программой &quot;строковый ввод-вывод&quot; 1)Создать текстовый файл F1 не менее, чем из 10 строк и записать в него...

Запись/считывание vector в/из файл - C++
Здравствуйте. Есть массив векторов. Необходимо их в бинарном виде записать, а потом считать из файла без сторонних библиотек. Использую...

Считывание и запись матрицы из/в файл - C++
Так,вообще вот исходный файл(F:\****\****\input.txt): 3 3 1 2 3 4 5 6 7 8 9 Первые два числа это размеры матрицы,остальные эта...


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

Или воспользуйтесь поиском по форуму:
9
Yandex
Объявления
02.08.2012, 21:52
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru