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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2013, 22:46   #1
BrookBond
Пользователь
 
Аватар для BrookBond
 
Регистрация: 08.06.2012
Сообщений: 46
По умолчанию Переключение файловых имен

Знатоки подскажите пожалуйста, как изменять имя файла, чтобы прога открывала нужный мне файл?
Чтоб я мог выбирать название файла. Я видимо с указателями путаюсь ((
Давно с этой проблемой столкнулся и никак не могу решить, гуглить не помогает
Код:
#include <iostream>

   int main()
  { FILE *f1;
  	char stroka[100];   
    int N=0;
    int time;
    char *fname;
    
    scanf("%d",&time);
         switch(time)
         {
         case1: *fname = "1.txt";break;
         case2: *fname = "2.txt"; break;
         case3: *fname1 = "3.txt"; break;
       
         default : printf("\nError name of fail");
         } 
         printf("\ntime=%d  fname=%s",time,fname); 
               
        if((f1=fopen(fname,"r"))==NULL); {printf("\nError open %s fail",fname);}
        while(!feof(f1))
                        {fscanf(f1,"%s\n,",& stroka);N++;}
               return 0;         
                        }
Вложения
Тип файла: rar Openfail.rar (416 байт, 5 просмотров)

Последний раз редактировалось Stilet; 30.03.2013 в 23:28.
BrookBond вне форума Ответить с цитированием
Старый 31.03.2013, 02:47   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Код:
#include <iostream>

   int main()
  { FILE *f1;
  	char stroka[100];   
    int N=0;
    int time;
    char *fname;  //<---- допускает изменение объекта, на которого нацеливается
    
    scanf("%d",&time);
         switch(time)
         {
         case1: *fname = "1.txt";break;    //<---- попытка нацелить на объект, который нельзя изменить.
         case2: *fname = "2.txt"; break;
         case3: *fname1 = "3.txt"; break;
       
         default : printf("\nError name of fail");
         } 
         printf("\ntime=%d  fname=%s",time,fname); 
               
        if((f1=fopen(fname,"r"))==NULL); {printf("\nError open %s fail",fname);}
        while(!feof(f1))
                        {fscanf(f1,"%s\n,",& stroka);N++;}
               return 0;         
                        }
[/QUOTE]


Правильно делать так:
http://liveworkspace.org/code/3ky5Pr$12

Код:
#include<stdio.h>
         
int main()
{
   int time=1; 
   const char* fname=0l;
   
   switch(time)
   {
        case 1: { fname="1.txt"; break; }
        case 2: { fname="2.txt"; break; }
        case 3: { fname="3.txt"; break; }
        default : { printf("\nError name of fail"); }
   } 
   printf("\ntime=%d  fname=%s",time,fname); 
}
В твоем случае так же важно осознавать какое концептуальное свойства языка было задействовано в твоём примере, и почему моральные программисты никогда не прибегают к его услугам.

А именно:

Код:
const char* Foo() { return "text"; }
По стандарту гарантированно валидная запись.
Возвращаемый указатель будет валиден. Ибо память под массив чаров храняций "text" будет создан в статической памяти.

Это отожрет часть ресурсов машины, и может породить непонятки с указателями. Так например:

Код:
const char* Foo1() { return "text"; }
Код:
const char* Foo2() { return "text"; }
Могут возвращать как два разных адреса (несмотря на то, что и там и там одинаковый текст), а могут возвращать и одинаковые адреса.

Неисчислимы жертвы подорвавшихся на этой и подобных минах.

Православные программисты предпочитают создавать чаровые буфера и копировать в них нужный им текст, а не оптимизировать на спичках.
_Bers вне форума Ответить с цитированием
Старый 31.03.2013, 10:38   #3
BrookBond
Пользователь
 
Аватар для BrookBond
 
Регистрация: 08.06.2012
Сообщений: 46
По умолчанию

Благодарю, Bers, очень помогли и все понятно написали!
BrookBond вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
бэкап файлов и файловых групп tanchick SQL, базы данных 0 12.06.2010 13:48
Обработка файловых структур данных в С++ zoluxa Помощь студентам 4 08.04.2010 23:23
Обработка файловых структур данных Any13 Помощь студентам 1 06.04.2010 18:07
Просмотр файловых потоков alexinspir Софт 2 20.11.2009 11:14
Использование файловых переменных britva666 Помощь студентам 4 15.06.2009 11:23