| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Переключение имен файла |
| Автор: BrookBond 30.3.2013, 21:51 |
| Знатоки подскажите пожалуйста, как изменять имя файла, чтобы прога открывала нужный мне файл? Чтоб я мог выбирать название файла. Я видимо с указателями путаюсь (( Давно с этой проблемой столкнулся и никак не могу решить, гуглить не помогает #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; } |
| Автор: ChihPih 30.3.2013, 22:00 |
| А разве нелья вместо привязки номера к имени, сразу имя файла считать с консоли, а потом открывать его? Добавлено @ 22:02 В Си/Си++ с указателями на строки так не работают, для работы со строками в Си, например, для копирования строки в массив типа char используют функцию strcpy, а в Си++ проще юзать класс string. |
| Автор: Crafty 30.3.2013, 22:13 | ||
Как вариант можно так сделать, но вообще наверное проще имя файла считывать
|
| Автор: BrookBond 30.3.2013, 22:34 |
| С консоли сразу имя не проще, это я привел упращенный вариант проги, на самом деле она большая. И если решить задачу с переключением, то всебудет Ок. Интересно почему переключатель не работает, даже так #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; } |
| Автор: Crafty 30.3.2013, 22:42 | ||
пробел между case и 1 у тебя есть?
PS используй тег код |
| Автор: BrookBond 30.3.2013, 22:42 | ||||
Благодарю, очень выручили)))))) |
| Автор: volatile 30.3.2013, 23:39 | ||
там вообще свитч не нужен. у вас имена же в массиве.
|