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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2010, 12:37   #1
nautilius
Новичок
Джуниор
 
Регистрация: 16.03.2010
Сообщений: 5
По умолчанию Программа вычитывает адрес файла

Доброе время суток,

Написал короткую функтию которая вичитывает матрицу из текст-файла в двух версия один раз если текст-файл лежит в тойже папке что прога, другой раз адрес файла прописан в проге(C:\users\user1\desktop\matrix .txt) например.

Код:
void read(int *m_p)
{

     FILE *fd;
     int p,k;
     
    fd=fopen("C:\\users\\user1\\desktop\\matrix.txt", "r");
    if (NULL==datei)
       {
                    printf("cant open\n");
       }
    
       for (k=0; k<3;k++)
           {
           for (p=k*3; p<(k*3 + 3);p++)
              {
                     fscanf(datei," %d; %d; %d; \n; %d; %d; %d; \n; %d; %d; %d; \n ", &m_p[p]);
               }
               cout <<endl;
           }
}
Пытаюсь переделать так чтобы программа спрашивала адрес файла и его надобыло бы записать на клаве. Как я узнал после того как прога была закончена команда fopen() есчо из c и немного устарела. Я новичок в c++ поэтому мне сложно и долго перебивать прогу на новые команды.
Может кто нибудь сталкивался с такой же или похожей задачей?

Заранее спасибо
nautilius вне форума Ответить с цитированием
Старый 16.03.2010, 12:50   #2
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

Код:
#include <stdio.h>

int main(void)
{
    char fPath[250];
    FILE *file;    
    scanf("%s", &fPath);
    file = fopen(fPath, "r");
    if(!file){
        printf("file not found");
    }else{
       printf("YES!");
    }
    getch();
    return 0;
}

Последний раз редактировалось NiCola999; 16.03.2010 в 12:52.
NiCola999 вне форума Ответить с цитированием
Старый 16.03.2010, 13:31   #3
nautilius
Новичок
Джуниор
 
Регистрация: 16.03.2010
Сообщений: 5
По умолчанию

спасибо за быстрий ответ, я пробовал идентичным кодом только бес getch() но безуспешно, т.к. fopen требует чтобы первый аргумент был const char что вело к ошибке даже бес зачитывания а с декларатией строчкой выше.

Попробовал твои Code нормально адрес считал, но как доходит fscanf выдаёт ошибку чтото типа: не смог прописать отрезок памяти 0x00000001

вероятно прога не работает из-за разници в адресах: рабочий fopen("C:\\users\\user1\\desktop\\m atrix.txt") двойной backslash и " "

с &fPath: fPath== C:\users\user1\desktop\matrix.txt без дбойных backslash и " ", если задать с двойным не находит файл.

может кто сталкивался уже с такой закарюкой?

Последний раз редактировалось Stilet; 16.03.2010 в 14:35.
nautilius вне форума Ответить с цитированием
Старый 16.03.2010, 14:36   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вообще-то в Си \ является управляющим символом.
Поэтому в путях прописываю \\ всегда, чтоб функции считали это как одинарный слэш.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.03.2010, 15:49   #5
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

нифига не понял, на кой там двойные слеши то? Двойной слеш используется для экранизации символа '\' в выводе на экран, так как \ это управляющий символ ввода/вывода. Вводи обычный путь с одинарными слешами.
NiCola999 вне форума Ответить с цитированием
Старый 16.03.2010, 16:44   #6
nautilius
Новичок
Джуниор
 
Регистрация: 16.03.2010
Сообщений: 5
По умолчанию

Если задаёш file=fopen("C:\users\users1\desktop \matrix.txt","r") то добегает до fscanf и обрывает, в scanf.c доходит до строки _VALIDATE_RETURN((stream != NULL), EINVAL, EOF); говорит expression: (stream!=NULL) и дальше не идёт.
nautilius вне форума Ответить с цитированием
Старый 16.03.2010, 16:54   #7
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

надо смотреть весь код...
NiCola999 вне форума Ответить с цитированием
Старый 16.03.2010, 17:03   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Двойной слеш используется для экранизации символа '\'
А разве в функциях работы с файлами он не используется?
Помоему что-т ты ошибся.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.03.2010, 17:25   #9
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

да, щас проверил, действительно используется), но когда ты просишь пользователя ввести путь к файлу, то не нужны двойные слеши

Последний раз редактировалось NiCola999; 16.03.2010 в 17:28.
NiCola999 вне форума Ответить с цитированием
Старый 16.03.2010, 17:25   #10
nautilius
Новичок
Джуниор
 
Регистрация: 16.03.2010
Сообщений: 5
По умолчанию

Весь код:
Код:
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <fstream>
#include <string>
#include <sstream>
 

using namespace std;

void read(int *m_p);
int main();


int main()
{
 int i;
 int j;
 int **result;
 int k;
int m[3][3];
 
 
read((int*)m);

  cout <<"Matrix is" <<endl;
  cout << endl;
  for (i=0;i<3;i++)
  {
      for (j=0;j<3;j++)
      {
          cout << m[i][j]<<"  ";
          }
          cout <<endl;
      }
  cout << endl;
  
   result = new int* [3];
  for (i=0; i<3;i++)
      {
      result[i]=new int[3];
                    for (j=0; j<3;j++)
                    {
                        result[i][j]=0;
                    }
                    }
                    cout << "matrix*matrix equal "<<endl;
                    cout << endl;
                                        for (i=0; i< 3;i++) 
                                            {
                                             for (j=0; j<3;j++)
                                                 {
                                                  for (k=0; k<3;k++)
                                                      
                                                       result[i][j]+=m[i][k]*m[k][j];
                                                       cout << result[i] [j] << "  ";
                                                 }  
                                                    cout << endl;   
                                            }   
  
  cout << endl;                                        
system("pause");
  
}  
  
  
void read(int *m_p)
{

     FILE *file;
     int p,k;
     char fPath[50];
          
     scanf("%s", &fPath);

    file=fopen(&fPath, "r");
    if (NULL==file)
       {
                    printf("cant open\n");
       }
    
       for (k=0; k<3;k++)
           {
           for (p=k*3; p<(k*3 + 3);p++)
              {
                     fscanf(file," %d; %d; %d; \n; %d; %d; %d; \n; %d; %d; %d; \n ", &m_p[p]);
               }
               cout <<endl;
           }
}

Прога считывает матрицу из текс-файла и возводит в квадрат после чего выдаёт обе.

Может с fopen ето вабще невозможно, всмысле с клавы задать адрес файла?

Последний раз редактировалось nautilius; 16.03.2010 в 20:04.
nautilius вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перед открытием файла программа должна спрашивать адрес файла Belii09878 Помощь студентам 1 07.03.2010 16:37
[PASCAL]Программа создания файла, программа обработки файла Виколяшка Фриланс 7 23.09.2009 17:38
Программа создания файла, программа обработки файла [PASCAL] Виколяшка Помощь студентам 1 22.09.2009 22:56
как узнать ip адрес зная mac адрес Roman Работа с сетью в Delphi 9 25.06.2007 12:39
КАК ВОЗВРАТИТЬ АДРЕС И ИМЯ ВЫБРАННОГО ФАЙЛА В OpenDialog? micaell Общие вопросы Delphi 1 16.01.2007 19:53