Файл с числами -> два массива

Тема в разделе "WASM.BEGINNERS", создана пользователем Saessie, 7 июл 2009.

  1. Saessie

    Saessie New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    29
    Задача реализовать на С/C++ такую вещь:

    есть файл, состоящий из двух столбцов чисел, разделенных одним пробелом, например:
    4.3432 7.212331
    0.121231 8.3213321
    -16.3234 6.324342
    ...

    Числа из первого столбца надо поместить в массив a, а из второго - в b, заранее определив их размер. Есть набросок кода:
    Код (Text):
    1. #include <stdio.h>
    2. #include <iostream.h>
    3.  
    4. int main ()
    5. {
    6.         FILE * f = fopen("myfile.txt","r");
    7.         int i,n;
    8.         fscanf(f,"%d %d",&i,&n);
    9.         fclose(f);
    10.         cout << "That is " << i << " and " << n << endl;
    11.  
    12.  
    13.         return 0;
    14. }
    Там, правда, пока не массив, но это не суть. Главное, что я не понимаю, как добраться до чисел в следующих строках, прочитать их и занести в какую-нибудь переменную (лучше - элемент массива).
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Saessie
    Сначала определись Си или Си++.
     
  3. Saessie

    Saessie New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    29
    OK, C.
     
  4. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Saessie
    Код (Text):
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3.  
    4. #define INC_COUNT  10
    5.  
    6. int main(void)
    7. {
    8.   size_t max_count = 0, count = 0, i;
    9.   float *a1 = NULL, *a2 = NULL;
    10.  
    11.   while (!feof(stdin))
    12.   {
    13.     if (count == max_count)
    14.     {
    15.       max_count += INC_COUNT;
    16.       a1 = (float *) realloc(a1, sizeof(float) * max_count);
    17.       a2 = (float *) realloc(a2, sizeof(float) * max_count);
    18.     }
    19.  
    20.     a1[ count ] = 0.f;
    21.     a2[ count ] = 0.f;
    22.  
    23.     fscanf(stdin, "%g %g", &a1[ count ], &a2[ count ]);
    24.  
    25.     count++;
    26.   }
    27.  
    28.   for (i = 0; i < count; i++)
    29.     fprintf(stdout, "a1[ %u ] = %g\ta2[ %u ] = %g \n", i, a1[i], i, a2[i]);
    30.  
    31.   return 0;
    32. }
     
  5. Saessie

    Saessie New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    29
    Вот сам доделал: полный текст:

    Код (Text):
    1. #include <stdio.h>
    2. #include <iostream.h>
    3. #include <math.h>
    4.  
    5. int main ()
    6. {
    7.         FILE *fp;
    8.         int i,n;
    9.         int numChars = 0; // number of all symbols
    10.         int numLines = 0; // number of all lines
    11.         char buff[512];//massiv dlya vvoda symvolov
    12.         size_t num;
    13.         fp = fopen("myfile.txt","r");
    14.         if (fp == 0)
    15.         {
    16.                 printf("Unable to open file. Terminating...\n");
    17.                 exit(1);
    18.         }
    19.         while ((num = fread(buff,1,512,fp)) > 0)//reading 512-symbols block. num is
    20.  the number of read symbols.
    21.         {
    22. //            numChars += num;
    23.         // number of lines:
    24.                 for (i=0;i<num;++i)
    25.                 {
    26.                         if (buff[i] == '\n')
    27.                         {
    28.                                 ++numLines;
    29.                         }
    30.                 }
    31.         }
    32.         fclose(fp);
    33.  
    34. //    printf("Number of symbols in file = %d\n",numChars);
    35.         printf("Number of lines in file = %d\n",numLines);
    36.  
    37.         float x[numLines],y[numLines];
    38.  
    39.  
    40.         fp = fopen("myfile.txt","r");
    41.         for(i=0;i<numLines;i++)
    42.         {
    43.                 fscanf(fp,"%f %f",&x[i],&y[i]);
    44.         }
    45.         fclose(fp);
    46.         printf("Done! Checking:\n");
    47.         for(i=0;i<numLines;i++)
    48.         {
    49.                 printf("%f %f\n",x[i],y[i]);
    50.         }
    51.         return 0;
    52. }