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

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

Войти
Регистрация
Восстановить пароль
 
dima_
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 23
#1

Подскажите условие - C++

17.09.2012, 00:12. Просмотров 557. Ответов 7
Метки нет (Все метки)

Не знаю какое должно быть условие, для проверки файла на пустоту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if(comand=="4")
            {
                cout<<"ЧТЕНИЕ ИЗ ФАЙЛА"<<endl;
                ifstream f;
                f.open("avto.txt");
                if(!f)
                {
                    cout<<"Невозможно открыть файл.";
                }
                if(f=="     ")     //ВОТ ЗДЕСЬ
                { 
                    cout<<"Файл пуст"<<endl;
                }
                else
                {
                st.out_file();// вывод из файла
                }
            }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
17.09.2012, 00:23     Подскажите условие #2
Попробовать чего-нибудь считать из файла, а потом проверить на eof. Что-то вроде
C++
1
2
3
if (f.peek(), f.eof()) {
  // файл пустой
}
DebieCooper
34 / 34 / 1
Регистрация: 12.10.2011
Сообщений: 290
17.09.2012, 00:27     Подскажите условие #3
Разве этого не достаточно?
C++
1
if(f.eof())
dima_
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 23
17.09.2012, 00:29  [ТС]     Подскажите условие #4
~OhMyGodSoLong~, Вроде работает, спасибо, но еще интересно знать о peek() и eof()
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
17.09.2012, 00:32     Подскажите условие #5
Просто флаг EOF не устанавливается сам по себе, он устанавливается постфактум после какой-то операции чтения из файла. Поэтому делается peek() — она читает символ из файла, но оставляет его в потоке (то есть не сдвигает указатель, если там что-то действительно было, чтобы этот символ можно было потом в следующий раз прочитать нормально). Соответственно, если файл пустой, то она ничего не считает, но установит бит EOF, на который и среагирует следующий за ней вызов eof().
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.09.2012, 02:15     Подскажите условие #6
~OhMyGodSoLong~, для начинающих, наверное, можно проще записать (без запятой):
C++
1
2
3
if (f.peek() == EOF) {
  // файл пустой
}
kotleta
42 / 42 / 11
Регистрация: 13.09.2012
Сообщений: 196
17.09.2012, 09:44     Подскажите условие #7
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
char c=0;
ifstream f("file");

f.get();
f.get();

if (f.eof() == true) cout << "end";

return 0;
}

Добавлено через 5 минут
alsav22, ваш вариант у меня почему-то не работает


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <fstream>
 
using namespace std;
 
int main()
{
    char c=0;
    ifstream f("file");
 
    f.get();
 
    if (f.peek() == EOF)
    {
      cout << "empty";
    }
 
    return 0;
}
Вот работает похоже у меня в строке еще какой-то символ есть, наверное перевода строки.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2012, 10:39     Подскажите условие
Еще ссылки по теме:

Условие C++
C++ Подскажите какое условие, чтобы с трёхзначного числа считывалась вторая цифра?
Добрый день. Подскажите, возможно ли в system задать условие? C++
Подскажите, какое условие нужно поставить C++
Подскажите условие C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.09.2012, 10:39     Подскажите условие #8
Вы пустой файл как делаете?

Добавлено через 5 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <fstream>
using namespace std;
 
int main()
{
    
    fstream f("file", ios::out);
    f.close();
    f.open("file", ios::in);
    
    if (f.peek() == EOF)
    {
      cout << "empty";
    }
    f.close();
    
    cout << endl;
    system("pause");
    return 0;
}
Добавлено через 14 минут
Проверка на пустоту, если файл просто откывается для чтения и в других случаях имеет свои особенности. Если для цели из первого поста, то мой способ вполне рабочий. В 7 посте, вы уже используете метод get(). Для каких целей вы get() делаете?
Yandex
Объявления
17.09.2012, 10:39     Подскажите условие
Ответ Создать тему
Опции темы

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