Перейти к содержимому

Как считать числа из файла в массив c

  • автор:

Запись чисел из файла в массив типа int

Наваял пока только это, дальше ухожу в гору ошибок. Подскажите решение, если можно как-то проще решить эту задачу был бы рад узнать как. Числа могут быть представлены по разному: в одной строке, в нескольких строках, с кучей пробелов между ними(не знаю, как адаптировать свои условия к этому).

Отслеживать
задан 11 окт 2017 в 18:04
user266908 user266908

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Где же у вас правильный вопрос. В заголовке — числа из файла в массив. Я отвечаю на него.

Вам нужен именно массив в C’шном смысле? Или в C++’ном, где его с успехом заменяет вектор? 🙂

Проще всего, пожалуй, так:

vector data; . int n; while(in >> n) data.push_back(n); 

А в тексте — уже говорите о символах. Вы уж определитесь.

И еще — проверять while(!in.eof()) — неверно, потому что флаг конца файла будет выставлен после неудачного чтения за концом файла, т.е. вы можете стоять на конце файла, но in.eof() вернет false .

Update

int n, count = 0; while(in >> n) ++count; in.clear(); in.seekg(0, ios::beg); int * data = new int[count]; count = 0; while(in >> n) data[count++] = 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;ino-dashi ★★★★★
( 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) возможно ?

  • Вопрос задан более двух лет назад
  • 863 просмотра

5 комментариев

Простой 5 комментариев

Евгений Шатунов @MarkusD Куратор тега C++

Считывание строк из файла и запись в массив на C++

Чтение из файла

Follow us on Twitter Follow us on rss

Добрый день! В этой статье я расскажу о том, как написать программу, которая будет считывать строки из файла. Покажу как записать их в массив или вывести. При написании программы будут использоваться функции из стандартной библиотеки языка C++.

Стандартная библиотека языка C++ включает множество функций для работы с файлами. Описание функций можно найти в сети или в учебниках по C++. Здесь же я опишу одну, которая позволит произвести чтение строки из файла.

Для начала определимся с файлом, с которого будем считывать информацию. Я создал файл с именем «strings.txt» и записал в него информацию, которую буду считывать в массив и выводить на экран.

is the first line is the second line is the third line

Три строки, содержащиеся в файле, я запишу массив и выведу на экран.

Пингвин читает содержимое файла

Пингвин читает содержимое файла

Переходим к написанию программы на C++.

Нашей программе понадобятся два заголовочных файла и . Первый нужен будет для использования вывода на консоль, второй для работы с файлами.

Объявим две целочисленные константы len и strings, они будут хранить максимальную длину наших строк и количество строк. Объявим символьную константу ch, которая будет хранить разделяющий символ. Первые две константы будут использоваться для объявления массива. Мой файл содержит 3 строки

const int len = 30, int strings = 3; const char ch = '\n';

При помощи значений двух первых констант объявим двумерный массив символов.

char mass[len][strings];

Создадим объект класса ostream, в конструктор поместим адрес файла, флаги открытия.

ifstream fs("strings.txt", ios::in | ios::binary);

Флаг ios::in позволяет открыть файл для считывания, ios::binary открывает его в двоичном режиме.

Далее стоит проверить открылся ли файл, если не открылся, то завершаем работу программы.

В данный момент программа имеет такой вид

#include #include using namespace std; int main()

Теперь остается описать алгоритм считывания строк из файла и занесения их в массив с последующим выводом. Для этого понадобится цикл от нуля до strings с инкрементом переменной r. Во время каждого прохода цикла используем перегруженную функцию getline() объекта fs с тремя аргументами.

fs.getline(Массив_символов, Макс_длина_строки, Разделитель_строк)

Функция считывает символы из файла, пока не считает количество равное Макс_длина_строки, либо не встретит на своём пути символ равный Разделитель_строк, а после записывает считанные символы в Массив_символов. В качестве разделителя в моём текстовом файле используется перенос строки.

После сразу же выводим содержимое строки, хранящееся в массиве, при помощи поточного вывода в консоль cout.

Весь листинг конечной программы

#include #include using namespace std; int main() < const int len = 30, strings = 5; const char ch = '\n'; char mass[len][strings]; ifstream fs("strings.txt", ios::in | ios::binary); if(!fs) return 1; //Если ошибка открытия файла, то завершаем программу for(int r = 0; rString 1 = is the first line String 2 = is the second line String 3 = is the third line String 4 = String 5 = -------------------------------- Process exited after 0.02249 seconds with return value 0

За счет константных переменных её можно легко модернизировать. Изменив константу strings, можно указать количество выводимых строк. Чтение из файла будет производится до тех пор, пока массив не заполнится нужным количеством строк. Изменив константу ch, можно изменить разделитель строк(Например, можно разделять их пробелом и занести в массив отдельные слова из файла и т.д.).

Если Вас интересует запись в файл, то почитайте статью о чтении из input.txt и записи данных в файл output.txt.

Пример работы string и пример считывания всех строк из файла в массив с последующим выводом

#include #include #include #include #include using namespace std; int main () < string str; cout << "Enter string (EOL = $) : "; getline (cin, str, '$'); cout << "Str is : " << str << endl; ifstream In("data.dat"); vectorv; cout copy(v.begin(),v.end(), ostream_iterator(cout, "\n")); cout

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *