Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
5 / 5 / 3
Регистрация: 13.10.2009
Сообщений: 542
1

Не срабатывает условие while (!file.eof()

23.03.2015, 08:45. Просмотров 2805. Ответов 8
Метки нет (Все метки)

Есть функция, которая считает из файла числа в динамический массив:
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
int* ReadFile(string FileName)
{
    ifstream file;
    file.open(FileName);
    int* mas=(int*)malloc(sizeof(int)*10);
    int Count = 10;
    int i = 0;
    while (!file.eof())
    {
        if (i==Count-1)
        {
            Count += 10;
            int* TempMas = (int*)malloc(sizeof(int)* (Count));
            for (size_t k = 0; k < sizeof(mas)/sizeof(int); k++)
            {
                TempMas[k] = mas[k];
            }
            free(mas);
            mas = TempMas;
        }       
        file >> mas[i];
        cout << mas[i] << " ";
        i++;
    }
    if (i!=Count-1)
    {
        int* TempMas = (int*)malloc(sizeof(int)* (i+1));
        for (size_t k = 0; k < sizeof(mas) / sizeof(int); k++)
        {
            TempMas[k] = mas[k];
        }
        free(mas);
        mas = TempMas;
    }
    file.close();
    return mas;
}
В процессе работы она уходит в бесконечный цикл. Почему, понять не могу...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.03.2015, 08:45
Ответы с готовыми решениями:

Почему не срабатывает EOF
У меня стоит Visual Studio 2010 написал простенькую программу #include &quot;stdafx.h&quot; #include...

Когда и как срабатывает eof() ?
Программа: #include &lt;Windows.h&gt; #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt;...

Не работает EOF (end-of-file)
EOF (end-of-line) не работает в условии завершения цикла. Вместо него работает -1. Если ввести -1...

EOF и char (-1) binary file
есть бинарный файл в котором есть байты, в том числе (-1)dec как я могу понять, что цикл достиг...

8
Заблокирован
23.03.2015, 10:19 2
при каком условии цикл прериватса то долзен?
0
Модератор
Эксперт С++
9488 / 8156 / 4983
Регистрация: 18.12.2011
Сообщений: 21,746
Завершенные тесты: 1
23.03.2015, 10:25 3
Цитата Сообщение от Алерон Посмотреть сообщение
while (!file.eof())
Замените на
C++
1
while(file >> mas[i])
1
50 / 50 / 21
Регистрация: 08.02.2013
Сообщений: 189
23.03.2015, 10:27 4
В строке 4
Цитата Сообщение от Алерон Посмотреть сообщение
file.open(FileName);
ты методу open() передаешь объект класса string, однако, данный метод требует строку С - стиля,
представляющую из себя путь к файлу.

Поэтому строку 4 лучше переписать так:
C++
1
file.open(FileName.c_str());
1
6815 / 5956 / 2708
Регистрация: 14.04.2014
Сообщений: 25,504
23.03.2015, 11:58 5
Уже можно и string использовать.
0
5 / 5 / 3
Регистрация: 13.10.2009
Сообщений: 542
23.03.2015, 12:50  [ТС] 6
Цитата Сообщение от zss Посмотреть сообщение
Замените на
Код C++
1
while(file >> mas[i])
Не помогло. Вообще в цикл не заходит.
Цитата Сообщение от Extrim88 Посмотреть сообщение
Поэтому строку 4 лучше переписать так:
Код C++
1
file.open(FileName.c_str());
Безрезультатно, всё равно зацикливается.

Ещё меня настораживает обилие нулов в описании файла.
0
Миниатюры
Не срабатывает условие while (!file.eof()  
Эксперт C
23414 / 14664 / 3085
Регистрация: 24.12.2010
Сообщений: 31,228
23.03.2015, 12:59 7
Цитата Сообщение от Алерон Посмотреть сообщение
for (size_t k = 0; k < sizeof(mas)/sizeof(int); k++)
Ты знаешь, что sizeof(mas)=4 ?
Ну, в крайнем случае, 8. Это размер указателя.
И может быть имеет смысл использовать realloc? Ты его пытаешься смоделировать, но как-то неудачно.
1
5 / 5 / 3
Регистрация: 13.10.2009
Сообщений: 542
23.03.2015, 13:10  [ТС] 8
Во общем, как я понял, дело в файле. Он не открывается(проверил file.is_open).
В мейне следующее:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void main()
{
    string file1 = "C:\file1.txt";
    string file2 = "C:\file2.txt";
    int* mas1 = ReadFile(file1);
    int* mas2 = ReadFile(file2);
    //for (size_t i = 0; i < sizeof(mas1)/sizeof(int); i++)
    //{
    //  cout<<mas1[i];
    //}
    system("pause");
 
}
Добавлено через 2 минуты
Байт, спасибо, исправлю.

Добавлено через 7 минут
Всем спасибо, проблему(бесконечно глупую) решил изменив путь
0
Эксперт C
23414 / 14664 / 3085
Регистрация: 24.12.2010
Сообщений: 31,228
23.03.2015, 13:13 9
Цитата Сообщение от Алерон Посмотреть сообщение
проверил
За одно проверяй и что возвращает malloc (realloc)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.03.2015, 13:13

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Дублирование последнего символа while ( !file.eof() )
Хочу получить содержимое текстового файла, со всеми строками и пробелами. На выводе получаю один...

Дублирование последнего символа while ( !file.eof() )
Подскажите пожалуйста почему в файле file.txt, который записывает программа, дублируется последний...

Не срабатывает EOF в программе
У меня стоит Visual Studio 2010 написал простенькую программу #include &quot;stdafx.h&quot; #include...

EOF срабатывает только после 2-х комбинаций ctrl+Z
EOF в функции getline срабатывает только после 2-х комбинаций ctrl+Z. Подскажите, пожалуйста, как...


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

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

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