Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переключение имен файла, switch для переключения имен файла 
:(
    Опции темы
BrookBond
Дата 30.3.2013, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Возможно все.....



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 9.6.2012
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Знатоки подскажите пожалуйста, как изменять имя файла, чтобы прога открывала нужный мне файл? 
Чтоб я мог выбирать название файла. Я видимо с указателями путаюсь ((
Давно с этой проблемой столкнулся и никак не могу решить, гуглить не помогает
#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; 
}
PM MAIL WWW   Вверх
ChihPih
Дата 30.3.2013, 22:00 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 3.12.2006

Репутация: нет
Всего: 22



А разве нелья вместо привязки номера к имени, сразу имя файла считать с консоли, а потом открывать его?

Добавлено @ 22:02
Цитата(BrookBond @  31.3.2013,  00:51 Найти цитируемый пост)
case1: *fname = "1.txt";break;

В Си/Си++ с указателями на строки так не работают, для работы со строками в Си, например, для копирования строки в массив типа char используют функцию strcpy, а в Си++ проще юзать класс string.

Это сообщение отредактировал(а) ChihPih - 30.3.2013, 22:05


--------------------
www.info-x.org - информационный ресурс о ОС FreeBSD. Форум.
PM MAIL WWW Jabber   Вверх
Crafty
Дата 30.3.2013, 22:13 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 3.11.2008

Репутация: 2
Всего: 14



Как вариант можно так сделать, но вообще наверное проще имя файла считывать
Код

char *fileNames[] = {"1.txt",
                     "2.txt",
                     "3.txt"};
switch(time)
{
    case 1: fname = fileNames[0];break;
    case 2: fname = fileNames[1]; break;
    case 3: fname = fileNames[2]; break;

    default : printf("\nError name of fail");


PM MAIL   Вверх
BrookBond
Дата 30.3.2013, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Возможно все.....



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 9.6.2012
Где: Санкт-Петербург

Репутация: нет
Всего: нет



С консоли сразу имя не проще, это я привел упращенный вариант проги, на самом деле она большая. И если решить задачу с переключением, то всебудет Ок. Интересно почему переключатель не работает, даже так 
#include <iostream>
#include <stdio.h>
  #include <conio.h>
  #include <ctype.h>
  #include <math.h>
 #include <stdlib.h>
#include <string.h>
   int main()
  { FILE *f1;
    char stroka[100];   
    int N=0;
    int time;
    
    scanf("%d",&time);
    char fname[20];
    
    
    
    
         switch(time)
         {
         case1: sprintf (fname, "GMKN_1.txt");break;
         case30: sprintf (fname, "GMKN_30.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++; printf("\n%d",N);}
                        
                        fclose(f1);
 getch ();            
    return 0;         
                       }                 

PM MAIL WWW   Вверх
Crafty
Дата 30.3.2013, 22:42 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 3.11.2008

Репутация: 2
Всего: 14



Цитата(BrookBond @  30.3.2013,  22:34 Найти цитируемый пост)
Интересно почему переключатель не работает, даже так 

пробел между case и 1 у тебя есть?
Код

case 1: sprintf (fname, "GMKN_1.txt");break; 


PS  используй тег код
PM MAIL   Вверх
BrookBond
Дата 30.3.2013, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Возможно все.....



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 9.6.2012
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Цитата(Crafty @ 30.3.2013,  22:13)
Как вариант можно так сделать, но вообще наверное проще имя файла считывать
Код

char *fileNames[] = {"1.txt",
                     "2.txt",
                     "3.txt"};
switch(time)
{
    case 1: fname = fileNames[0];break;
    case 2: fname = fileNames[1]; break;
    case 3: fname = fileNames[2]; break;

    default : printf("\nError name of fail");


Благодарю, очень выручили))))))    smile 
PM MAIL WWW   Вверх
volatile
Дата 30.3.2013, 23:39 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



там вообще свитч не нужен. у вас имена же в массиве.

Код

if (time < size_of_array)
   fname = fileNames[time];
else
   // Error ...


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0855 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.