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

Запись и чтение из файла - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.62
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
27.09.2010, 22:43     Запись и чтение из файла #1
Доброго время суток!
Так от балди решыл набросать прогу которая создаёт файл записывает туда 11 рандомных чисел,потом з помощю ifstream я считую данные из файла,заношу в масив и сортирую.Непонимаю где здесь ошыбка.
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
#include <iostream>
#include <fstream>
#include <ctime>
int main()
{
    std::ofstream creat_file("c:\\test.txt");
    srand(time(0));
    for(int i = 0; i <= 10; i++)
    {
        int x = rand()%100+1;
        creat_file << x << " ";
    }
    creat_file.close();
    std::ifstream read_file("c:\\test.txt");
    const int n = 100;
    int m[n];
    while(!read_file.eof())
    {
        int m[n];
        read_file >> m[n];
        if(!read_file.eof())
            std::cout << x << " "; 
    }
    for(int i = n - 1; i >= 1; i--)
        for(int j = 0; j < i; j++)
        {
            if(m[j] > m[j + 1])
            {
                int foo = m[j];
                m[j] = m[j + 1];
                m[j + 1] = foo;
            }
        }
    std::cout << std::endl;
    for(int i = 0; i < n; i++)
        std::cout << m[i] << " "; 
    std::cin.get();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2010, 22:43     Запись и чтение из файла
Посмотрите здесь:

Си, Запись и Чтение из файла. C++
Запись и чтение с файла C++
C++ запись\чтение из файла
Чтение/запись файла C++
запись и чтение с файла C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Crudelis
Шаровик затейник
 Аватар для Crudelis
667 / 409 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
27.09.2010, 22:56     Запись и чтение из файла #2
Цитата Сообщение от Asics^ Посмотреть сообщение
read_file >> m[n];
вы считываете весь массив в какую то одну позицию n, сделайте так:

C++
1
2
3
4
5
6
7
8
9
while(!read_file.eof()&&j<n)
        {
                int j=0;
                int m[n];
                read_file >> m[j];
                j++;
                if(!read_file.eof())
                        std::cout << x << " "; 
        }
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
27.09.2010, 23:04  [ТС]     Запись и чтение из файла #3
В строке 22 ошыбка должно быть так
C++
1
std::cout << m[n] << " ";
Добавлено через 1 минуту
C++
1
while(!read_file.eof()&&j<n)
так переменую j нужно же обявить не в цикле,или я ошыбаюсь ?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
28.09.2010, 04:52     Запись и чтение из файла #4
если делаешь int m[n]; в цикле, то он на каждом витке создаётся снова
старое содержимое пропадает и после цикла он тоже не доступен

в первом примере ещё обращение к m[n], а такого элемента нет
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
28.09.2010, 15:18  [ТС]     Запись и чтение из файла #5
Немношко переделал
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
#include <iostream>
#include <fstream>
#include <ctime>
int main()
{
    std::ofstream creat_file("c:\\test.txt");
    srand(time(0));
    for(int i = 0; i <= 10; i++)
    {
        int x = rand()%100+1;
        creat_file << x << " ";
    }
    creat_file.close();
    std::ifstream read_file("c:\\test.txt");
    const int n = 100;
    int m[n];
    for(int i = 0; !read_file.eof(); i++)
        {
          read_file >> m[i];
                 if(!read_file.eof())
                     std::cout << m[i] << " "; 
        }
    read_file.close();
    for(int i = n - 1; i >= 1; i--)
        for(int j = 0; j < i; j++)
        {
            if(m[j] > m[j + 1])
            {
                int foo = m[j];
                m[j] = m[j + 1];
                m[j + 1] = foo;
            }
        }
    std::cout << std::endl;
    for(int i = 0; i < n; i++)
        std::cout << m[i] << " "; 
    std::ofstream write("c://test.txt");
    for(int i = 0; i < n; i++)
        write << m[i] << " ";
    std::cin.get();
    return 0;
}
Уже даже сортирует,но много не понятных цыфр напрягает,есть ришение ?
Миниатюры
Запись и чтение из файла  
dihlofos
Бродяга
 Аватар для dihlofos
302 / 256 / 17
Регистрация: 27.08.2010
Сообщений: 553
28.09.2010, 15:34     Запись и чтение из файла #6
C++
1
const int n = 100;
Почему 100? Вроде же для 11 элементов сначала было?)))
Crudelis
Шаровик затейник
 Аватар для Crudelis
667 / 409 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
28.09.2010, 15:35     Запись и чтение из файла #7
Asics^, вы в файл записали 10 значений, а считываете 100, ничего удивительно, понятно откуда берутся эти веселые цифры ниже нуля)

Добавлено через 42 секунды
C++
1
2
3
4
5
for(int i = 0; i <= 100; i++)
        {
                int x = rand()%100+1;
                creat_file << x << " ";
        }
и будет счастье)
Andrew_Lvov
Эксперт C++
 Аватар для Andrew_Lvov
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 758
Записей в блоге: 1
28.09.2010, 15:36     Запись и чтение из файла #8
Магические цифры в действии, ага.

UPD. Хотя нет. Просто не учитывается кол-во считанных чисел.
И зачем if(!read_file.eof()) непонятно.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
28.09.2010, 16:00  [ТС]     Запись и чтение из файла #9
Цитата Сообщение от Andrew_Lvov Посмотреть сообщение
И зачем if(!read_file.eof()) непонятно.
Если не поставить здесь проверку то последний елемент файла будет выводитсо на консоль дважды.

Добавлено через 1 минуту
Цитата Сообщение от dihlofos Посмотреть сообщение
Почему 100? Вроде же для 11 элементов сначала было?)))
Ну а если я не буду знать точно что там 11 елементов,тому и поставил 100.

Добавлено через 3 минуты
Написал
C++
1
const int n = 11;
заработалоСпасибо всем
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.09.2010, 16:04     Запись и чтение из файла
Еще ссылки по теме:

Запись и чтение из файла C++
Запись и чтение из файла C++
C++ Запись и чтение из файла

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

Или воспользуйтесь поиском по форуму:
dihlofos
Бродяга
 Аватар для dihlofos
302 / 256 / 17
Регистрация: 27.08.2010
Сообщений: 553
28.09.2010, 16:04     Запись и чтение из файла #10
Цитата Сообщение от Asics^ Посмотреть сообщение
Ну а если я не буду знать точно что там 11 елементов,тому и поставил 100.
Значит объявляйте константу до заполнения массива. Используйте её и при заполнении и при считывании, и везде где нужно. Главное, чтобы это было одинаковое число. А то записываете 11, а читаете 100, так же не бывает.

Добавлено через 51 секунду
Ok, работает, значит хорошо
Yandex
Объявления
28.09.2010, 16:04     Запись и чтение из файла
Ответ Создать тему
Опции темы

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