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

Как определить конец файла? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 171, средняя оценка - 4.65
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
04.04.2011, 15:48     Как определить конец файла? #1
В файле лежит одно число, которое нужно проверить на делимость на 11.
Число большое-до 10^10000.
Попробовал сделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
main(){
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    char b;
    int c=0;
    while (true){
    cin >> b;
    if (EOF==1) break;  //В этом
    c+=(int)b-48;
    cin >> b;
    if (EOF==1) break; //и этом месте хочу поставить проверку на конец строки...
    c-=(int)b-48;
    }
    if (c%11==0) cout << "YES"; else cout << "NO";
    return 0;
    }
Цикл идет бесконечно, хотя в input.txt число 121.
Не совсем понятно, как eof работает не в цикле while, который в данном случае не совсем подходит.
P.S. Наверняка эту задачу можно решить и по другому(через строку, например), но меня интересует именно определение конца файла.
P.P.S.после числа нету других символов

Добавлено через 11 минут
В исходниках, что я видел, было примерное такое:while (!eof(fh))
Но у меня нету переменной под файл...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
04.04.2011, 18:09     Как определить конец файла? #2
создай указатель и присвой ему открытие файла и потом используй этот указатель в функции feof или eof
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
04.04.2011, 18:20  [ТС]     Как определить конец файла? #3
Цитата Сообщение от panicwassano Посмотреть сообщение
создай указатель и присвой ему открытие файла и потом используй этот указатель в функции feof или eof
А можно пример условия в моем случае либо литературу/ссылки на эту тему?
Все, что я находил, использовалось только в while.
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
04.04.2011, 18:23     Как определить конец файла? #4
yandex.ru MSDN fopen
sandora
12 / 12 / 0
Регистрация: 10.02.2011
Сообщений: 42
04.04.2011, 19:04     Как определить конец файла? #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <stdio.h>
using namespace std;
 
main()
{
int *ch;
FILE *fp;
 
fp=fopen("...", "r");
 
while(!foeof(fp))
{
fscanf(fp, "%g", ch);
 if (ch%11==0) cout << "YES";
 else cout << "NO";
}
        
return 0;
}
C++
1
2
3
4
while(!foeof(fp))
{
//и здесь код
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
04.04.2011, 19:49     Как определить конец файла? #6
sandora, Таки feof
И я не понял на кой фиг указатель на int да еще и не выделена память?)
sandora
12 / 12 / 0
Регистрация: 10.02.2011
Сообщений: 42
04.04.2011, 22:33     Как определить конец файла? #7
Цитата Сообщение от ForEveR Посмотреть сообщение
sandora, Таки feof
И я не понял на кой фиг указатель на int да еще и не выделена память?)
с еофом очепятка получилась))
я сначала там указатель на char писал, а потом поставил int, а указатель не убрал
Digit@ll
Brainsbreaker
 Аватар для Digit@ll
832 / 343 / 27
Регистрация: 01.02.2011
Сообщений: 1,484
05.04.2011, 01:20     Как определить конец файла? #8
diagon, вот, http://www.cyberforum.ru/cpp-beginne...ead245506.html в Винде. Нажмешь мне потом "бибу".
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
05.04.2011, 15:30     Как определить конец файла? #9
Это кстати олимпиадная задача
Ну если автор не может просто прочитать символы из файла, то эту задачу ему точно не решить

Вообще тут думать нечего
Берем буфер на 16K:
char buf[16384];

и с помощью fgets() читаем все символы числа в этот буфер
там не более 10000 - должно хватить
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
05.04.2011, 15:47  [ТС]     Как определить конец файла? #10
Не такая уж она и олимпиадная...
http://********/index.asp?main=task&id_task=357
Сложность 22%
Решил ее через строку без проблем, если кому надо, то код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
using namespace std;
main(){
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    char s[10004];
    int i,c=0;
    cin >> s;
    if (strlen(s)%2==0){
        for (i = 0; i < strlen(s); i+=2) {
    c+=(int)s[i]-48;
    c-=(int)s[i+1]-48;
    }
        }else
        {for (i = 0; i < strlen(s)-1; i+=2) {
    c+=(int)s[i]-48;
    c-=(int)s[i+1]-48;
    }
    c+=s[strlen(s)-1]-48;   }
    printf("%s",(c%11==0)?("YES"):("NO"));
    return 0;
    }
Код от sandora я не совсем понял...
Там одно число, но очень большое, в числовые типы не влазит. Зачем там цикл и почему считывается как float, если не влазит даже в __int64?
Насчет 26 символа... Это работает?
И еще такая проблемка... В входном файле лежит число, считываю его через
Код
cin >> char
но судя по дебаггеру, если зациклить считывание, то после конца числа в переменной всегда оказывается последняя цифра... Надо считывать чем-то другим или закрыть глаза?
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
08.04.2011, 16:53  [ТС]     Как определить конец файла? #11
Добрался в справочнике до feof, вроде работает, попробовал его на этой же задаче
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
main(){
    FILE *f;
    char a;
    int c=0;
    f=fopen("input.txt","r");
    freopen("output.txt","w",stdout);
    while(true) {
        fscanf(f,"%c",&a);
        c+=(int)a-48;
        if (feof(f)) break;
        fscanf(f,"%c",&a);
        c-=(int)a-48;
        if (feof(f)) break;
        }
    printf("%s",(c%11==0)?("YES"):("NO"));
    fclose(f);
    return 0;
}
Почему-то лишний раз считывается последняя цифра, следовательно неправильный ответ. Ничего после числа не стоит.
При введенном числе 121 считывает 1,2,1,1 и только потом находит конец файла.
В чем ошибка?
DeadRipper
64 / 70 / 3
Регистрация: 25.06.2009
Сообщений: 244
08.04.2011, 17:20     Как определить конец файла? #12
лучше работать с буфером уже непосредственно в памяти, для начала взять размер файла, потом выделить буфер во столько же байт, считать туда весь файл , и работать уже с буфером, не запариваясь
Choopa
 Аватар для Choopa
17 / 17 / 0
Регистрация: 03.04.2011
Сообщений: 89
08.04.2011, 17:27     Как определить конец файла? #13
Можно попробовать считать всю строку
по моему getline() точно не помню
Хотя можешь переделать под потоки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <fstream>
 
int main()
{
    string a;     //объявление строки
    char s[256];   //объявление массив символов
    ifstream inf;  //создоание объекта для работы с файлом
    inf.open("c:\\text.txt");  //открытие файла
    inf>>a;                //чтение до первого пробела или enter
    inf.getline(s,sizeof(s)); //чтение строки целиком
 
    
 
    ofstream out;   //для записифайла
    out.open();
    out<<a<<endl;  //выводит
    
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2011, 11:41     Как определить конец файла?
Еще ссылки по теме:

C++ Работа с файлами, как определить конец строки
C++ Как записывать данные в конец файла
Как корректно обработать конец файла? C++

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

Или воспользуйтесь поиском по форуму:
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
09.04.2011, 11:41  [ТС]     Как определить конец файла? #14
Через строку я давно уже решил(первая страница)... Хочу считать посимвольно до конца файла, это уменьшит размер кода и обьем занимаемой памяти(не придется строку хранить в памяти, и потом по ней циклом пробегатся).

UPD:Кому лень читать всю тему-проблема в 1м посте на 2й странице(Как определить конец файла?)
Yandex
Объявления
09.04.2011, 11:41     Как определить конец файла?
Ответ Создать тему
Опции темы

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