C - запись вывода в файл - PullRequest
       38

C - запись вывода в файл

0 голосов
/ 11 февраля 2012
EDIT: 

void print(const int *v, const int size) {
 FILE *fpIn;
 fpIn = fopen("char-array.txt", "a");
 int i;  
 if (v != 0) {
   for (i = 0; i < size; i++) {
     printf("%d", (int)v[i]);
     fprintf(fpIn, "%d\n", (int)v[i]);   
   }
   perm_count++;
   printf("\n");
 }
 fclose(fpIn);
} 

Я думаю, это довольно простой вопрос :)

В основном программа использует алгоритм перестановки и выводит вывод на стандартный вывод в консоли.Я также хочу записать содержимое в файл через fprintf, я полагаю.Хотя я не могу заставить его работать.Он просто печатает символы мусора в первой строке текстового файла и ничего более!

Я вставлю приведенный ниже код, и помощь очень ценится!Код для записи в файл находится в функции печати. ​​

Спасибо,

T.

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <time.h>

#include <time.h>
clock_t startm, stopm;
#define START if ( (startm = clock()) == -1) {printf("Error calling clock");exit(1);}
#define STOP if ( (stopm = clock()) == -1) {printf("Error calling clock");exit(1);}
#define PRINTTIME printf("%2.3f seconds used by the processor.", ((double)stopm-          startm)/CLOCKS_PER_SEC);

int perm_count = 0; 

void print(const int *v, const int size) {
  FILE *fpIn;
  fpIn = fopen("char-array.txt", "wb");
  int i;  
  if (v != 0) {
    for (i = 0; i < size; i++) {
      printf("%d", (char)v[i]);
      fprintf(fpIn, "%d", v[i]);  
      fprintf(fpIn, "\n");  
    }
    perm_count++;
    printf("\n");
  }
} 


void permute(int *v, const int start, const int n) {  
  int i;  
  if (start == n-1) {
    print(v, n);
  }
  else {
    for (i = start; i < n; i++) {
      int tmp = v[i];
      v[i] = v[start];
      v[start] = tmp;
      permute(v, start+1, n);
      v[start] = v[i];
      v[i] = tmp;
    }
  }
}

int main() {
 int i, x;
 printf("Please enter the number of terms: ");
 scanf("%d", &x);
 int arr[x];   
 printf("Please enter the terms: ");
 for(i = 0; i < x; i++)
 scanf("%d", &arr[i]);
 START
 permute(arr, 0, sizeof(arr)/sizeof(int));
 STOP   
 printf("Permutation Count: %d\n", perm_count);
 PRINTTIME
 return 0;
}

Ответы [ 3 ]

6 голосов
/ 11 февраля 2012

1.Неправильные режимы доступа в fopen вызов
Вы открываете свой файл как двоичный файл : fopen("char-array.txt", "wb");.Не помещайте b в эту строку, содержащую режимы доступа , если вы собираетесь писать отформатированные строки там.А поскольку вы, вероятно, хотите добавить новые данные в конец файла, а не перезаписывать их, используйте a вместо w:

fopen("char-array.txt", "a");

2.Запись в выходной буфер, а не непосредственно в файл
Когда вы используете такие функции, как fprintf , вы записываете не напрямую в файл, а в выходной буфер.Вы должны использовать fflush для записи данных из выходного буфера в файл, или вы можете просто закрыть свой файл, используя функцию fclose , которая автоматически очищает этот буфер.

Просто добавьте эту строку:

fclose(fpIn);

в конце функции print.

3.Неправильное форматирование вывода
Не следует приводить int к char.Это будет урезать ваши номера.И у вас также есть fprintf(fpIn, "\n"); в неправильной области видимости.Это может выглядеть так:

for (i = 0; i < size; i++) {
  printf("%d ", v[i]);
  fprintf(fpIn, "%d ", v[i]);
}
perm_count++;
printf("\n");
fprintf(fpIn, "\n");
1 голос
/ 11 февраля 2012

Не тратьте свое время на программирование, которое вам не нужно, использование fprintf приятно, но так как все, что вы хотите сделать, это напечатать вывод, вы можете просто распечатать вещи в файл напрямую, используя встроенную UNIX в командах. Скажем, ваша программа называется wirteoutput, тогда все, что вам нужно сделать, это передать следующую команду при вызове из оболочки writeoutput > file.txt. Все, что вам нужно будет использовать, это функция printf.

Если вам интересно это, это старая функция, и вы можете найти подробное описание в оригинальном документе Операционная система UNIX . Посмотрите на раздел под названием Стандартный ввод / вывод.

0 голосов
/ 11 февраля 2012

Вы не произвели преобразование в char (из int), когда писали в файл, как вы делали на экране.Ниже приведены те же цифры в файле, что вы видите на экране:

fprintf(fpIn, "%d", (char)v[i]);
...