Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2010, 15:55   #1
ReaktiV
Пользователь
 
Аватар для ReaktiV
 
Регистрация: 25.07.2008
Сообщений: 82
По умолчанию Не возможно открыть файл

Вот часть программы:
Код:
void input_file(plane q[])
{int n,i;
const int len=50;
char line[len];
n=chislostr();        // Функция которая определяет сколько строк в файле
if(n==0){ CharToOem("В БД нет записи\n", str);
    cout << str;}
if(n!=0){inStream.open(nf,ios::in);  //nf название файла
if(!inStream)
    {
        cout<<"file not open"; 
        return;}
for(i=0;i<n;i++){
inStream>>q[i].name;
inStream>>q[i].rl;
inStream>>q[i].gp;
inStream>>q[i].prot;
inStream>>q[i].kp;
}
inStream.close();
}
}
From Stilet: Для форматирования кода есть тег по кнопке #. Настоятельно рекомендую им пользоваться

Постоянно сообщение file not open в чём может быть проблема?
1. n - выдает правильно
2. nf - тоже считывает
3. ifstream inStream; - прописан

Последний раз редактировалось Stilet; 11.05.2010 в 08:13.
ReaktiV вне форума Ответить с цитированием
Старый 10.05.2010, 16:17   #2
oleg kutkov
Unix C++ developer
Форумчанин
 
Аватар для oleg kutkov
 
Регистрация: 16.04.2007
Сообщений: 651
По умолчанию

1. Отформатируйте код по человечески, что бы можно было нормально читать.
2. Чему конкретно равно значение n ? Т.е., проверьте, что возвращает загадочная chislostr() (Как она определяет количество строк в файле, вероятно же открывает его.. ?)
3. Что означает "nf - тоже считывает" ? Имя файла указано правильно ?
oleg kutkov вне форума Ответить с цитированием
Старый 10.05.2010, 16:36   #3
ReaktiV
Пользователь
 
Аватар для ReaktiV
 
Регистрация: 25.07.2008
Сообщений: 82
По умолчанию

Вот функция n
Код:
int chislostr ()
{int d;
	const int len=50;
	char line[len];
inStream.open(nf,ios::in);
d=0;
while(inStream.getline(line,len)){
d=d+1;
}
inStream.close();
return(d/5);
}
да она открывает файл и выдаёт ответ - это работает.
Цитата:
3. Что означает "nf - тоже считывает" ? Имя файла указано
правильно ?
Да считывается, но пробовал и ручной ввод не помогло.

Последний раз редактировалось Stilet; 11.05.2010 в 08:14.
ReaktiV вне форума Ответить с цитированием
Старый 10.05.2010, 17:17   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Цитата:
1. Отформатируйте код по человечески, что бы можно было нормально читать.
Имею к этому добавить, что тег QUOTE для кода - не вариант, есть тег CODE специально для этих целей (значок # прямо справа от значка для QUOTE)
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 11.05.2010, 05:02   #5
ReaktiV
Пользователь
 
Аватар для ReaktiV
 
Регистрация: 25.07.2008
Сообщений: 82
По умолчанию

Скажите а пожалуйста где я ошибся.
ReaktiV вне форума Ответить с цитированием
Старый 11.05.2010, 05:48   #6
Alex_sim
Форумчанин
 
Аватар для Alex_sim
 
Регистрация: 18.02.2010
Сообщений: 164
Радость

Цитата:
Сообщение от ReaktiV Посмотреть сообщение
Скажите а пожалуйста где я ошибся.
Попробуй стандартные потоки
Код:
// посимвольный вывод содержимого текстового файла на экран
#define _CRT_SECURE_NO_DEPRECATE
 
#include <stdio.h>
#include <conio.h>
#include <locale.h>
 
int main() {
 
      setlocale( LC_ALL, "Russian" );
     
      // открытие файла
      FILE *f;
      f = fopen( "myfile.txt", "rt" );
      if( f == NULL ) {
            printf( "Не могу открыть \"myfile.txt\" на чтение. Нажмите клавишу...\n" );
            _getch();
            return -1;
      }
     
      // работа с файлом 
      printf( "Обрабатывается \"myfile.txt\"...\n\n" );
      int c;
      c = fgetc(f);
      while( feof(f)==0 )  {
            printf( "%c", c );
            c = fgetc(f);
      }
     
      // закрытие файла
      fclose(f);
      printf( "\nОбработка завершена.\n" );
      _getch();
}
небольшой пример посимвольного чтения файла должно помочь

просто сначала считай нормально в массив или куда там тебе надо и потом уже с ним работай и не мучай дополнительные функции можно все гораздо проще сделать)))))))))

Последний раз редактировалось Stilet; 11.05.2010 в 08:14.
Alex_sim вне форума Ответить с цитированием
Старый 11.05.2010, 09:46   #7
Alex_sim
Форумчанин
 
Аватар для Alex_sim
 
Регистрация: 18.02.2010
Сообщений: 164
По умолчанию

Отзывы не забываем
Alex_sim вне форума Ответить с цитированием
Старый 11.05.2010, 10:21   #8
ReaktiV
Пользователь
 
Аватар для ReaktiV
 
Регистрация: 25.07.2008
Сообщений: 82
По умолчанию

Имя файла и так в массиве А число строк нужно в разных местах использовать. так что хотелось бы увидеть свою ошибку.
ReaktiV вне форума Ответить с цитированием
Старый 11.05.2010, 10:43   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ReaktiV
Можно глянуть как у тебя inStream описан?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.05.2010, 11:09   #10
ReaktiV
Пользователь
 
Аватар для ReaktiV
 
Регистрация: 25.07.2008
Сообщений: 82
По умолчанию

я вроде нашел ошибку:
Код:
#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
char str[256];
ofstream outStream;
ifstream inStream;
const int L=20;

char nf[30];
Код:
case 1: input_file(q); output(q); getch(); break;
Код:
int chislostr ()
{int d;
	const int len=50;
	char line[len];
inStream.open(nf,ios::in);

     
d=0;
while(inStream.getline(line,len)){
d=d+1;
}
inStream.close();
return(d/5);
}
Код:
void input_file(plane q[])
{int n,i;
const int len=50;
char line[len];
n=chislostr();

if(n==0){ CharToOem("Â ÁÄ íåò çàïèñè\n", str);
    cout << str;}
if(n!=0){inStream.open(nf,ios::in);{

for(i=0;i<n;i++){
inStream>>q[i].name;
inStream>>q[i].rl;
inStream>>q[i].gp;
inStream>>q[i].prot;
inStream>>q[i].kp;
}}
inStream.close();
}
}
Код:
void output(plane q[])
{int i,n;
n=chislostr();
if(n!=0){
cout.setf(ios::left);
cout<<"naimenovanie    raion linii     god puska     protyazhennost'	 kollichestvo poezdov\n";
for(i=0;i<n;i++){
cout.width(18); cout<<q[i].name;
cout.width(15); cout<<q[i].rl;
cout.width(18); cout<<q[i].gp;
cout.width(20); cout<<q[i].prot;
cout.width(15); cout<<q[i].kp<<"\n";
}
}
}
Тык вот в функции outout при втором запуске числа строк (chislostr) почему то n выдаёт как n=0;

Последний раз редактировалось ReaktiV; 11.05.2010 в 11:18.
ReaktiV вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возможно ли открыть exe-файл в ms visual 2008?(c++) Александр Елис Visual C++ 5 30.09.2009 10:28
Как открыть файл? Xnarcotic Общие вопросы Delphi 4 14.06.2009 11:51
не возможно открыть диски Vladya Компьютерное железо 4 27.04.2009 20:15
Открыть файл dbClick-ом; Altera Помощь студентам 1 03.02.2008 15:40