Как считать массив из файла?
Программа должна считывать массив из файла и искать в нём минимальный элемент, но что-то не получается нормально считать сам массив. В чем проблема?
#include "stdafx.h" #include #include "fstream" using namespace std; void main() < ifstream in("input.txt"); int array[5]; in >> array[5]; int min = array[0]; for (int i = 1; i < 5; i++) < if (array[i] < min) < min = array[i]; >> ofstream out("output.txt"); out
Файл input.txt
Отслеживать
задан 15 окт 2017 в 6:58
109 1 1 золотой знак 3 3 серебряных знака 10 10 бронзовых знаков
Читать надо поэлементно в цикле, и разделители по умолчанию — символы пробельной группы (запятая в них не входит). Ну, и еще в коде выход за пределы массива. Индексы начинаются с 0, т.е. элемента array[5] не существует.
15 окт 2017 в 7:48
@alexolut , я, вроде как, array[5] и не использую, тк в цикле i строго меньше 5
Считать числа из текстового файла в массив (Си)
Задача В текстовом файле INPUT.TXT записаны целые числа через пробел, возможно, в несколько строк. Сформировать список (массив) этих чисел. Решение Для начала, программа должна открыть файл INPUT.TXT для чтения, для этого используется функция fopen с опцией «r» . Если файл не удалось открыть — она возвращает нулевой указатель:
int main() < FILE* input = fopen("INPUT.TXT", "r"); if (input == 0) < printf("cant open file\n"); return 1; >// .
Теперь (если файл успешно открыт) можно считать его содержимое в массив. Для ввода целых чисел с файла в Си применяется функция fscanf опцией «%d» . Однако, нам нужно считать числа в массив, а значит — массив надо предварительно создать (с помощью функции malloc ). Создание массива — это выделение памяти и нужно знать сколько выделять памяти, но мы не знаем сколько чисел в файле — поэтому перед тем как создавать массив необходимо пройтись по всему файлу и посчитать в нем количество целых чисел. Напишем для этого вспомогательную функцию:
int numberCount(FILE* input) < fseek(input, 0, SEEK_SET); int counter = 0; while (true) < int value; if (fscanf(input, "%d", &value) == 1) counter++; if (feof(input)) break; >return counter; >
В начале своей работы функция устанавливает с помощью fseek указатель (позицию) чтения на начала файла — относительно начала ( SEEK_SET ) на ноль позиций. Далее — в цикле последовательно считывает числа с файла с помощью fscanf . После ввода каждого числа с помощью feof проверяет не был ли поднят флаг конца файла. Если файл кончился — выходит из цикла и возвращает значение счетчика. Теперь мы можем выделить память под массив в функции main:
int size = numberCount(input); int* numbers = (int*)malloc(sizeof(int) * size);
И считать числа с файла в массив, для этого еще раз проходимся по файлу и считываем с него заданное количество чисел:
void read_numbers(FILE* input, int size, int* numbers) < fseek(input, 0, SEEK_SET); for (int i = 0; i < size; ++i) < fscanf(input, "%d", &numbers[i]); >>
Также, напишем вспомогательную функцию для вывода содержимого массива на экран:
void print_array(int* numbers, int size) < for (int i = 0; i < size; ++i) < printf("%d ; ", numbers[i]); >printf("\n"); >
Чтение из файла в массив на Си (начинающий)
Поможите пожалуйста!
Есть файл 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]
Как считать массив из файла c
Регистрация: 16.12.2009
Сообщений: 3
Как считать массив из файла?
Обьясните пожалуйста на примере, как из текстового файла с числовыми данными, введенных например через пробел, считать данные и вести их на экран в виде двухмерного массива?(На языке СИ)
Последний раз редактировалось Ronin021992; 16.12.2009 в 19:30 .
Ronin021992 |
Посмотреть профиль |
Найти ещё сообщения от Ronin021992 |
Форумчанин
Регистрация: 16.02.2009
Сообщений: 555
#include #include using namespace std; int main() < int const n=4; int i=0; int j=0; int a[n][n]; ifstream f("1.txt"); while(!f.eof()) < if(j==n) < i++; j=0; coutf>>a[i][j]; cout system("pause"); >