whitequark

Untitled

Apr 7th, 2011
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.76 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. int main(int argz, char** argv) {
  4.   FILE *eingang, *ausgang;
  5.   int format, N, M, i, j;
  6.  
  7.   if(argz != 6 || (strcmp(argv[3], "d") && strcmp(argv[3], "f"))) {
  8.     fprintf(stderr, "Verbrauch: %s eingang.dat ausgang.dat [d|f] N M\n", argv[0]);
  9.     fprintf(stderr, "  Der Eingang sollte im binären Format vorliegen.\n");
  10.     fprintf(stderr, "  Letzte Argument gibt Format: 'd' für double, und 'f' für float.\n");
  11.     fprintf(stderr, "  N und M sind Dimensionen eines Arrays.\n");
  12.     return 1;
  13.   }
  14.  
  15.   if((eingang = fopen(argv[1], "r")) == NULL) {
  16.     fprintf(stderr, "Kann Eingabedatei nicht öffnen.\n");
  17.     goto ausfahrt;
  18.   }
  19.  
  20.   if((ausgang = fopen(argv[2], "w")) == NULL) {
  21.     fprintf(stderr, "Kann nicht geöffnet werden Ausgabedatei.\n");
  22.     goto schliessen_eingang;
  23.   }
  24.  
  25.   format = strcmp(argv[3], "d"); /* 0 ist double, 1 ist float */
  26.   N = atoi(argv[4]), M = atoi(argv[5]);
  27.  
  28.   if(format == 0) {
  29.     double* datum = (double*) malloc(sizeof(double) * M * N);
  30.     fread(datum, sizeof(double), M * N, eingang);
  31.  
  32.     for(i = 0; i < M; i++) {
  33.       for(j = 0; j < N; j++) {
  34.         fprintf(ausgang, "%f", datum[j + i * N]);
  35.         fprintf(ausgang, (j == N - 1) ? "\n" : "\t");
  36.       }
  37.     }
  38.   } else {
  39.     float* datum = (float*) malloc(sizeof(float) * M * N);
  40.     fread(datum, sizeof(float), M * N, eingang);
  41.  
  42.     for(i = 0; i < M; i++) {
  43.       for(j = 0; j < N; j++) {
  44.         /*
  45.          * Ein float Argument für eine Funktion wie variadische
  46.          * fprintf wird automatisch befördert double.
  47.          */
  48.         fprintf(ausgang, "%f", datum[j + i * N]);
  49.         fprintf(ausgang, (j == N - 1) ? "\n" : "\t");
  50.       }
  51.     }
  52.   }
  53.  
  54.   fclose(ausgang);
  55. schliessen_eingang:
  56.   fclose(eingang);
  57. ausfahrt:
  58.  
  59.   return 0;
  60. }
Add Comment
Please, Sign In to add comment