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

Ввод из файла не работает - C++

Восстановить пароль Регистрация
 
Demetrio2000
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 8
13.10.2013, 14:51     Ввод из файла не работает #1
Здравствуйте, помогите пожалуйста решить проблему. Программа должна ввести данные из файла в массив структур. Но до этого дело так и не доходит: файл не открывается, срабатывает конструкция If для отлова ошибки открытия.

Внизу сокращённый текст программы с проблемным участком:


C++ (Qt)
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
void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale (LC_ALL, "RUS"); // вызов функции настройки локали для отображения кириллицы
int i,c,j,n;
 
fstream f;
f.open("11.txt",ios::nocreate); //ввод из файла
 
if (f)
{
  char *str = new char [60];
     n=0;
    while (!f.eof())
    {
        f>>str;
        n++;
    }
    f.close();
    delete str;
}
else cout<<"Ошибка открытия файла";
getch();
}
В приведённом куске подсчитываю количество строк в файле
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2013, 14:51     Ввод из файла не работает
Посмотрите здесь:

C++ ввод из файла
Ввод из файла C++
C++ Ввод из файла.
C++ ввод матрицы из файла.
Ввод из файла C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.10.2013, 14:56     Ввод из файла не работает #2
Это что?
C++
1
ios::nocreate
Demetrio2000
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 8
13.10.2013, 15:20  [ТС]     Ввод из файла не работает #3
режим открытия файла. если файл не существует - ошибка. без этой строки тоже не работает. всё же вся суть в If(f).
По идее файловая переменная возвращает true, если проблем не было и файл открыт, и false если обратное.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.10.2013, 15:27     Ввод из файла не работает #4
Цитата Сообщение от Demetrio2000 Посмотреть сообщение
режим открытия файла. если файл не существует - ошибка.
Это откуда такое? В ios:: такого режима нет.

Добавлено через 57 секунд
Файл существует и где находится?
Demetrio2000
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 8
13.10.2013, 15:42  [ТС]     Ввод из файла не работает #5
нашёл где-то в инете + у меня в руках учебник по Си++ Павловской издательство Питер 2011, в котором этот режим описан и используется во всех примерах. Компилятор не ругается на него. Файл лежит в папке с проектом. пробовал прописывать путь к нему но так же безрезультатно
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.10.2013, 15:44     Ввод из файла не работает #6
Цитата Сообщение от Demetrio2000 Посмотреть сообщение
Компилятор не ругается на него.
Какой?
Demetrio2000
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 8
13.10.2013, 15:46  [ТС]     Ввод из файла не работает #7
среда BDS 2006. большего не скажу)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.10.2013, 15:51     Ввод из файла не работает #8
Вот здесь почитайте: ios::nocreate

Добавлено через 1 минуту
Цитата Сообщение от Demetrio2000 Посмотреть сообщение
Файл лежит в папке с проектом.
Полное имя файла (вместе с расширением)?
Demetrio2000
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 8
13.10.2013, 16:02  [ТС]     Ввод из файла не работает #9
11.txt

Провожу эксперименты без проверки на открываемость: программа работает, но соответственно бесконечно крутит память (условие while (!eof)) и записывает несуществующие значения

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
n=5;
man *spisokf = new man[n];//объявление массива из структур,являющегося списком информации о спортсменах
i=0;
f.open("11.txt");
while ((!f.eof()) & (i<4))
    {
    f>>spisokf[i].lname;
    spisokf[i].progress=true;
    for(j=0;j<5;j++)
        f>>spisokf[i].time[j];
    i++;
    }
f.close();
в примере конечно я поставил ограничение на количество проходов
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.10.2013, 16:15     Ввод из файла не работает #10
В начале main() напишите:
C++
1
ofstream fout("22.txt");
И посмотрите, где файл появится и с каким именем.

Добавлено через 2 минуты
Видимость расширений файлов в ОС включена?
Demetrio2000
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 8
13.10.2013, 16:26  [ТС]     Ввод из файла не работает #11
Большое спасибо! Помогло, файл 22 появился не в той папке где лежал мой файл. переместил свой и всё заработало. Но тогда возникает такой вопрос: если мне нужно ввести конкретный путь к файлу, как это оформляется? была запись:

C++ (Qt)
1
f.open("D:\11.txt");
переместил файл на диск Д в корень,
но проблема не решилась.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.10.2013, 16:29     Ввод из файла не работает #12
Обратный слеш двойным нужно писать:
C++
1
f.open("D:\\11.txt");
Добавлено через 51 секунду
Цитата Сообщение от Demetrio2000 Посмотреть сообщение
файл 22 появился не в той папке
Файл 22 или файл 22.txt появился?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2013, 16:29     Ввод из файла не работает
Еще ссылки по теме:

C++ Ввод из файла
Не работает ввод имени файла через fget и открытие через fopen C++
C++ Ввод двух getline подряд работает некорректно

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

Или воспользуйтесь поиском по форуму:
Demetrio2000
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 8
13.10.2013, 16:29  [ТС]     Ввод из файла не работает #13
Блин, аж стыдно =\ спасибо )))

22.txt
Yandex
Объявления
13.10.2013, 16:29     Ввод из файла не работает
Ответ Создать тему
Опции темы

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