LINUX.ORG.RU

Чтение из файла в массив на Си (начинающий)


0

0

Поможите пожалуйста!
Есть файл file с содержание типа 3 6 3 1.
Нужно прочитать файл и записать каждую цифру в массив. (число строк в файле известно заранее)
Пробовал так:
for (i = 0; i < n ; i++)
{
a[i] = getc(fp);
printf("%d\n", a[i]);
}
или может пойти выспаться?

anonymous

char c;
int i=0;
while((c=getc(fp))!=EOF)
{
a[i]=c;
cout<<a[i];
i++;
}

проще:
fread(<массив>, <размер считываемого блока>, 1, <файл>)

anonymous
()
Ответ на: комментарий от Flogger_d

C++ не катит.
Вот что у меня получилось: правда работает бредово и не считает пробелы :(
- числа выводятся не в том формате. info printf ничем не помог.

#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argc, char* argv[])
{
char* path = argv[1];
int i;
unsigned char buffer[16];
size_t offset = 0;
size_t bytes_read;
int fd = open(path, O_RDONLY);
if (fd == -1)
{
perror ("open");
return 1;
}
do {
bytes_read = read(fd, buffer, sizeof (buffer));
}
while (bytes_read == sizeof (buffer));
for (i=0; i < bytes_read; i++)
printf("%d", buffer[i]);
printf("\n");

}

anonymous
()
Ответ на: комментарий от anonymous

Так тебе что - просто файл на экране распечатать - или массив с цифрами заполнить?
Если первое - то можно просто по символу читать поток и кидать сразу на вывод, не заморачиваясь с буфером - все равно оно буферизуется , если пользуешься f-функциями.
Если второе - то твоя программа все равно этого не делает и нужно использовать fscanf:

#include <stdio.h>
#include <assert.h>

#define HOW_MANY 100
/* здесь - сколько цифр в файлике */

int main(int ac, char** av){
char cyphers[HOW_MANY];
FILE* f;
int i;

f=fopen(AV[1],"r");
for(i=0; i<HOW_MANY;++i){
if(fscanf(f,"%d",cyphers+i) != 1) break;
printf("%d ",cyphers[i]);
}

return 0;
}

Flogger_d
()
Ответ на: комментарий от Flogger_d

Частично, т.к. это было только начало.
надо чтобы заводился двуменрый массив из файла вида:
1 2 3 4
5 6 7 9
4 9 9 8

Буду пробовать на выходных.

anonymous
()
Ответ на: комментарий от anonymous

#include <stdio.h>
#include <stdlib.h>

#define ROWS 10
#define COLS 15

//
// Считать в массив матрицу из файла, размерность
// матрицы считать ROWS строк и COLS столюцов
//
int main() {
   int ** array;
   int i;
   int j;

   //
   // распределить память!
   //
   array = (int**) malloc(sizeof(int*)*ROWS);
   for (i=0;i<ROWS;i++) array[i]=(int*)malloc(sizeof(int)*COLS);

   //
   // Прочитать данные в массив (по математической традиции
   // номер строки считается ПЕРВЫМ индексом массива, номер
   // столбца считается ВТОРЫМ индексом
   //
   for (i=0;i<ROWS;i++)
      for (j=0;j<COLS;j++)
         fscanf(stdin,"%d",array[i]+j);

   //
   // освоболить память, memleaks must die!
   //
   for (i=0;i<ROWS;i++) free(array[i]);
   free(array);

   return 0;
}

no-dashi ★★★★★
()
Ответ на: комментарий от no-dashi

а нафига собственно такую структуру городить в памяти? элементарно заводим сплошной кусок и индексируемся в нем типа m[i][j]==m[i*COLUMNS+j]

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.