С Новым годом! Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 27.09.2021
Сообщений: 18

Из массива выходят странные числа

18.04.2023, 18:12. Показов 1133. Ответов 4

Студворк — интернет-сервис помощи студентам
Здравствуйте у меня проблема, при создании массива генерируются правильные числа, а при взятии этих чисел в другой файл выводится всякая фигня. Помогите пожалуйста исправить, вот мой код:

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <sys/syscall.h>
void swap (int & num_1, int & num_2){
int temp { num_1};
num_1 = num_2;
num_2 = temp;
}
typedef struct{
std::string file_input;
int num_string;
std::string file_out;
} pthrData;
void generate_array (std::string file_name_arr , int max_num){
std::ofstream out {file_name_arr};
for (int i = 0; i < 5; ++i){
for (int j = 0; j < 25; ++j) {
out << rand() % (max_num + 1) + 1 <<" ";
}
out << std::endl;
}
out.close();
}
void expand (std::string file_name_arr, int num_string, std::string file_name_res){
std::ifstream in {file_name_arr};
int arr [5][25];
for (int i= 0; i < 5; ++i) {
for (int j = 0; j < 25; ++j) {
in >> arr[i][i];
}
}
in.close();
for (int i = 0; i < 12; ++i) {
swap(arr[num_string][i], arr[num_string][24 - i]);
}
std::ofstream out {file_name_res};
for (int j = 0; j < 25; ++j) {
out << arr[num_string][j] << " ";
}
out.close();
}
void* threadFunc(void* thread_data){
pthrData *data = (pthrData*) thread_data;
expand(data->file_input, data->num_string, data->file_out);
std::cout << " Stream number " << data->num_string + 1 << " ID: " << gettid() << std::endl;
return NULL;
}
int main() {
generate_array("array.txt", 100);
pthrData threadData[5];
pthread_t threads [5];
for(int i = 0; i < 5; i++){
int status;
threadData[i].num_string = i;
threadData[i].file_input = "array. txt";
threadData[i].file_out = "out"+ std::to_string (i + 1)+ ".txt";
status = pthread_create(&(threads[i]), NULL, threadFunc, &threadData[i]);
if (status != 0) {
std::cout<< "main error: can't create thread, status = "<< status << std::endl;
exit(-11);
}
}
for(int i = 0; i < 5; i++){
int status;
int status_addr;
status = pthread_join(threads[i], (void**)&status_addr);
if (status != 0) {
std::cout << "main error: can't join thread, status = " << status << std::endl;
exit(-12);
}
}
return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.04.2023, 18:12
Ответы с готовыми решениями:

Выводятся странные числа в качестве элементов массива
Программа считает 100 событий, в результате чего получаем массив из 100 чисел типа double, который выводится в файл. Затем эти числа...

Из массива выходят странные числа
Здравствуйте у меня проблема, при создании массива генерируются правильные числа, а при взятии этих чисел в другой файл выводится всякая...

Выводятся странные числа в качестве элементов массива
Есть массив MM из чисел типа float, нужно его построить частотную гистограмму из элементов массива, для этого используется следующий цикл: ...

4
118 / 86 / 35
Регистрация: 07.11.2022
Сообщений: 355
18.04.2023, 23:15
1) Добавьте проверку, что файл открылся.
Вот тут пробел в названии, файл не открылся и массив поэтому забит мусором.
Цитата Сообщение от Niki4Pro Посмотреть сообщение
C++
1
threadData[i].file_input = "array. txt";
Похоже что так.

2) Зачем каждый из потоков читаете весь массив целиком, а использует только одну строку из массива?
Не лучше скачать массив, потом запустить потоки и обработать массив, по строке на поток?
0
0 / 0 / 0
Регистрация: 27.09.2021
Сообщений: 18
19.04.2023, 09:16  [ТС]
К сожалению не помогло
0
118 / 86 / 35
Регистрация: 07.11.2022
Сообщений: 355
19.04.2023, 10:31
Лучший ответ Сообщение было отмечено Niki4Pro как решение

Решение

что не помогло ?

задача какая ?
Цитата Сообщение от NEED-A-JOB Посмотреть сообщение
2) Зачем каждый из потоков читаете весь массив целиком, а использует только одну строку из массива?
зачем ??
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
19.04.2023, 16:48
Цитата Сообщение от Niki4Pro Посмотреть сообщение
К сожалению не помогло
Внимательнее надо быть:
Цитата Сообщение от Niki4Pro Посмотреть сообщение
C++
1
in >> arr[i][i]; //<---???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.04.2023, 16:48
Помогаю со студенческими работами здесь

Почему по итогу выходят не те числа?
Console.WriteLine(&quot;Введите число&quot;); int b = Convert.ToInt32(Console.ReadLine()); int a = new int {33, 42, 65, 23, 22}; foreach (int i...

Не выходят значения массива на экран
var myObj, i, j, x = &quot;&quot;; myObj = { &quot;name&quot;:&quot;John&quot;, &quot;age&quot;:30, &quot;cars&quot;: }, { &quot;name&quot;:&quot;BMW&quot;, &quot;models&quot;: }, ...

Вывод массива: выходят нули и одно число
Новичок в Java. Задача была - создать массив из всех нечётных чисел от 1 до 99, вывести его на экран в строку, а затем этот же массив...

Найти номера элементов массива, значения которых выходят за пределы интервала
1)Ввод значений элеметов массива из N элементов и вывод массива на экран монитора. 2)В числовом ряду из Т элементов найти номера...

Странные числа
print(a ** b, b ** a) 243 125 Задание узнать значение a и b


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru