Как сделать увеличение числа после имен файлов в C? - PullRequest
0 голосов
/ 10 июня 2010

У меня маленькая проблема.Мне нужно сделать несколько небольших операций над множеством файлов в одной маленькой программе.До сих пор я решил использовать их в одном цикле, где я просто меняю номер после имени.Все файлы называются TFxx.txt, где xx увеличивает число от 1 до 80. Так как же я могу открыть их все в одном цикле один за другим?Я пробовал это:

for(i=1; i<=80; i++) {
   char name[8] = "TF"+i+".txt";
   FILE = open(name, r);
   /* Do something */
  }

Как вы можете видеть, вторая строка будет работать в Python, но не в C. Я пытался сделать аналогичную запуск нумерации с C для этой программы, но я неузнал еще как это сделать.Формат не должен быть таким, как во второй строке, но я хотел бы получить несколько советов о том, как я могу решить эту проблему.Все, что мне нужно, - это просто открывать много файлов и выполнять с ними одинаковые операции.

Ответы [ 5 ]

5 голосов
/ 10 июня 2010

Вы можете использовать sprintf следующим образом:

for(i=0; i<=80; i++) {
   char name[32];
   memset(name, 0, sizeof(name));
   FILE *fp;
   sprintf(name, "TF%d.txt", i);
   fp = fopen(name, "r");
   /* Do something */
  }
1 голос
/ 10 июня 2010

Допустим, у вас просто псевдокод;в противном случае проблема не только в

char name[8] = "TF"+i+".txt";

, где вы используете сумму для объединения строк и преобразования целого числа в строку ... (это разумно на некоторых языках, абсолютно не в C, где + простосумма между числами) ... но также FILE = open... проблематично ...

char name[BUFLEN];
sprintf(name, "TF%d.txt", i);

будет заполнять ваше имя (snprintf(name, BUFLEN, "TF%d.txt") может быть лучше, но это C99, в то время как другой тоже C89).

Файлы можно открыть, используя для чтения что-то вроде FILE *fh = fopen(name, "r").

1 голос
/ 10 июня 2010

В дополнение к ответу Дэниела я хотел бы добавить, что char name[8] должно быть немного больше, чтобы удерживать завершающий '\0', т.е. char name[20];

и FILE = open(name,r); должны быть FILE * fp = fopen(name,"r");

0 голосов
/ 10 июня 2010

И не должно ли char name[32] быть вне цикла for?

0 голосов
/ 10 июня 2010

Может быть, я ошибаюсь, но просто используйте fopen вместо open и напишите «r» вместо r?

FILE = fopen(name, "r");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...