Чтение из файла в массив на Си (начинающий)
Поможите пожалуйста!
Есть файл file с содержание типа 3 6 3 1.
Нужно прочитать файл и записать каждую цифру в массив. (число строк в файле известно заранее)
Пробовал так:
for (i = 0; i < n ; i++)
<
a[i] = getc(fp);
printf(«%d\n», a[i]);
>
или может пойти выспаться?
anonymous
30.11.03 03:32:23 MSK
Re: Чтение из файла в массив на Си (начинающий)
anonymous
( 30.11.03 11:21:27 MSK )
Ответ на: Re: Чтение из файла в массив на Си (начинающий) от anonymous 30.11.03 11:21:27 MSK
Re: Re: Чтение из файла в массив на Си (начинающий)
anonymous
( 30.11.03 14:40:47 MSK )
Ответ на: Re: Чтение из файла в массив на Си (начинающий) от anonymous 30.11.03 11:21:27 MSK
Re: Re: Чтение из файла в массив на Си (начинающий)
а разве он не начнет пробелы считыват %)
anonymous
( 30.11.03 16:58:12 MSK )
Ответ на: Re: Re: Чтение из файла в массив на Си (начинающий) от anonymous 30.11.03 16:58:12 MSK
Re: Re: Re: Чтение из файла в массив на Си (начинающий)
Да, начал. Товарищ предыдущий anonymous, может быть подскажите что?
anonymous
( 30.11.03 18:14:48 MSK )
Ответ на: Re: Re: Re: Чтение из файла в массив на Си (начинающий) от anonymous 30.11.03 18:14:48 MSK

Re: Re: Re: Re: Чтение из файла в массив на Си (начинающий)
Посмотри man fscanf
OxiD ★★★★
( 01.12.03 11:12:06 MSK )
Re: Чтение из файла в массив на Си (начинающий)
DKorolkov ★
( 01.12.03 11:47:34 MSK )
Ответ на: Re: Чтение из файла в массив на Си (начинающий) от DKorolkov 01.12.03 11:47:34 MSK
Re: Re: Чтение из файла в массив на Си (начинающий)
Если на С++, то еще проще:
Flogger_d ★
( 01.12.03 12:10:30 MSK )
Ответ на: Re: Re: Чтение из файла в массив на Си (начинающий) от Flogger_d 01.12.03 12:10:30 MSK
Re: Re: Re: Чтение из файла в массив на Си (начинающий)
C++ не катит.
Вот что у меня получилось: правда работает бредово и не считает пробелы 🙁
— числа выводятся не в том формате. info printf ничем не помог.
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
( 01.12.03 17:10:15 MSK )
Ответ на: Re: Re: Re: Чтение из файла в массив на Си (начинающий) от anonymous 01.12.03 17:10:15 MSK
Re: Re: Re: Re: Чтение из файла в массив на Си (начинающий)
Так тебе что — просто файл на экране распечатать — или массив с цифрами заполнить?
Если первое — то можно просто по символу читать поток и кидать сразу на вывод, не заморачиваясь с буфером — все равно оно буферизуется , если пользуешься f-функциями.
Если второе — то твоя программа все равно этого не делает и нужно использовать fscanf:
#define HOW_MANY 100
/* здесь — сколько цифр в файлике */
int main(int ac, char** av)<
char cyphers[HOW_MANY];
FILE* f;
int i;
Flogger_d ★
( 01.12.03 17:33:42 MSK )
Re: Re: Re: Re: Re: Чтение из файла в массив на Си (начинающий)
В fopen av — понятное дело — в нижнем регистре
Flogger_d ★
( 01.12.03 17:36:23 MSK )
Re: Re: Re: Re: Re: Re: Чтение из файла в массив на Си (начинающий)
Да, и на счет массива я прогнал — он должен быть типа int а не char.
Flogger_d ★
( 01.12.03 17:38:00 MSK )
Re: Re: Re: Re: Re: Re: Re: Чтение из файла в массив на Си (начинающий)
Да, мне нужно именно загнать в массив.
А вывожу я просто для проверки.
anonymous
( 01.12.03 18:20:16 MSK )
Re: Re: Re: Re: Re: Re: Re: Re: Чтение из файла в массив на Си (начинающий)
Так что — победил или нет?
Flogger_d ★
( 02.12.03 12:57:23 MSK )
Re: Re: Re: Re: Re: Re: Re: Re: Re: Чтение из файла в массив на Си (начинающий)
Частично, т.к. это было только начало.
надо чтобы заводился двуменрый массив из файла вида:
1 2 3 4
5 6 7 9
4 9 9 8
Буду пробовать на выходных.
anonymous
( 02.12.03 13:43:22 MSK )

Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Чтение из файла в массив на Си (начинающий)
#include #include #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
( 02.12.03 20:52:32 MSK )
Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Чтение из файла в массив на Си (начинающий)
а нафига собственно такую структуру городить в памяти? элементарно заводим сплошной кусок и индексируемся в нем типа m[i][j]==m[i*COLUMNS+j]
С++ Как извлекать числа из файла в числовой массив для дальнейшей манипуляции над этими числами?
https://inf-ege.sdamgia.ru/problem?id=37348
По ссылке содержится само задание и подкрепленный файл в формате txt
Нужно срочно для ЕГЭ . Как извлекать числа из файла в числовой массив для дальнейшего использования этих чисел ? Без C-стайла ,пожалуйста . И ,возможно ,ли сделать так со статическим массивом ? Или все -таки только коллекции ? С использованием библиотеки fstream Нужно просто ответить как считывать числа в файл на языке C++ ,а не решение этой задачи .
Я новичок ,кроме массивов больше ничего не знаю: ни векторы ,ни коллекции , ни списки.
Если с массивом не возможно , а со списком(list) возможно ?
- Вопрос задан более года назад
- 723 просмотра
5 комментариев
Простой 5 комментариев
Евгений Шатунов @MarkusD Куратор тега C++
[C/C++] Чтение чисел из файла, создание массива заполненного этими числами.
В файле находятся вещественные числа. Определить количество элементов файла, величина которых меньше среднего арифметического всех элементов данного файла.
Я прикинул предварительный план решения и составил 3 пункта:
1) (То, что я незнаю как реализовать.): Читаем *.txt файл chisla и выделяем из этого файла все вещественные числа стоящие
через пробел (пример файла : «234432.324422 565463.4353 2425654.478».. и т.д.) Записываем по порядку каждое число в новый
динамический массив chisla, размер массива = числу чисел из файла.
2) Находим среднее значение всех чисел используя массив, это я могу сделать.
3) Выводим на экран все элементы массива, меньшие чем их среднее значение. Это я тоже могу реализовать.
Заранее спасибо за любую помощь.
13 ответов
05 июня 2007 года
1.4K / / 24.07.2006
1) (То, что я незнаю как реализовать.): Читаем *.txt файл chisla и выделяем из этого файла все вещественные числа стоящие
через пробел (пример файла : «234432.324422 565463.4353 2425654.478».. и т.д.) Записываем по порядку каждое число в новый
динамический массив chisla, размер массива = числу чисел из файла.
.
Это ты с числами решил общаться как со строками? Почему не с бинарным файлом, а именно с текстровым?
05 июня 2007 года
13 / / 04.06.2007
Ммм. если я что-то говорю не так, то прошу прощения.
Опыта работы с файлами в си ранее не имел.
05 июня 2007 года
1.4K / / 24.07.2006
да не, все так, это твоя мысля и твое право работать с числами и файлами так, как захочется. Просто удобнее было бы на мой взгляд забить в бинарный файл числа типа long long, чтобы на все хватило, и затем читать их. Иначе тебе придется парсить строку, выковыривая числа, и затем юзать нечто вроде strtoint. На мой взгляд, если задача не критична, лучше юзать блочные чтение/запись бинарного файла. Вот небольшой примерчик
#include
#include
#define SIZE 20 //это кол-во элементов
int main( void )
int count
long long array1[SIZE], array2[SIZE];
FILE *fp;
// забиваем массив 1 числами 0,1,2,4. 38
for (count = 0; count < SIZE; count++)
array1[count] = (long long) (2 * count);
// открываем бинарный файл
if ( (fp = fopen(«file.bin», «wb»)) == NULL)
fprintf(stderr, «Error opening file.»);
exit(1);
>
// сохраняем в файл первый массив
// fwrite (void *buff, int size, int count, FILE *fp)
// buff — указатель на память, которую пишем
// size — размер отдельных элементов
// count — число элементов
if (fwrite(array1, sizeof(long long), SIZE, fp) != SIZE)
fprintf(stderr, «Error writing to file.»);
exit(1);
>
// Открываем файл на чтение
if ( (fp = fopen(«file.bin», «rb»)) == NULL)
fprintf(stderr, «Error opening file.»);
exit(1);
>
// Читаем файл в массив 2
if (fread(array2, sizeof(long long), SIZE, fp) != SIZE)
fprintf(stderr, «Error reading file.»);
exit(1);
>
// Во втором массиве должны быть полученные данные, выводи их, сверяй и т.д.
Считать числа из файла в массив
В файле записано неизвестное количество чисел. Нужно считать их в одномерный массив.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
#include #include int main(){ int k,i; FILE *ptrfile; k=0; int s; ptrfile=fopen("C:\\Users\\Самсунг\\Desktop\\mass.txt","r+"); while ((fscanf(ptrfile, "%d",&s)!=EOF)) { k+=1; printf ("k=%d ",k); printf ("s=%d\n",s); } int c[k]; for(i=0;ik;i++) { fscanf(ptrfile, "%d",&c[i]); printf("c[%d]=%d ",i,c[i]); } fclose(ptrfile); }
c[i] выводит неверные. Как правильно можно это осуществить?
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Считать из файла числа в массив
здравствуйте. подскажите, как можно из подключенного текстового файла считать только числа (float).
Считать числа из файла в массив
Помогите мне сохранить числа, записанные в файле через пробел в 1 строку, в массив.(при том.
Считать заданные числа из файла в массив
вроде всё делаю правильно , но не компилируется программа должна считать данные числа из файла в.

Считать числа с файла в массив int
В файле есть числа, допустим "12 15 0 3", их нужно поместить в массив int. Пробовал так: int.
Регистрация: 11.07.2012
Сообщений: 22
Размер массива должен иметь константное значение,поставь с[1000] и всё
Добавлено через 8 минут
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#include int main(){ FILE *f; f=fopen("input.txt","r"); int k,i,l[100],x[100]; for(k=0;!feof(f);k++) fscanf(f,"%d",&l[k]); for(i=0;ik-1;i++) { x[i]=l[i]; printf("%d ",x[i]); } fclose(f); }
Заблокирован
Victor A, вы были почти у цели:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
#include #include int main() { int k,i; FILE *ptrfile; k=0; int s; ptrfile=fopen("mass.txt","r+"); //так мне было короче ) while ((fscanf(ptrfile, "%d",&s)!=EOF)) { if(!ptrfile) break; //чтобы не делал лишнего k+=1; } int *c = (int*) malloc(k*sizeof(int)); //должен быть динамическим rewind(ptrfile); //перематываем файл для повторного чтения for(i=0;ik;i++) { fscanf(ptrfile, "%d",&c[i]); printf("c[%d]=%d ",i,c[i]); } fclose(ptrfile); free(c); //убираем мусор, когда уже не нужен (но не раньше =)) getchar(); //задержка консоли return 0; }