C++: cout выводит преобразованые в строку числа больше 256
У меня проблема cout не хочет выводить числа больше чем 256 символов на экран. Моя программа создаёт массив из случайных чисел в заданном диапазоне. После этого выводит его на экран. Кроме этого вычисляет самый большой и самый маленький его элемент. Программа распознает число т.к выводит как максимальные числа больше 256, но на экране их не видно. Буду рад любой помощи.
#include <iostream>
#include <ctime>
using namespace std;
int main(int argc, char *argv[])
{
int size = 20;
int array[size];
srand(time(NULL));
string random_arr = "";
int min_value = 0;
int max_value = 1000;
int random_num;
//заполняем массив случайными числами
for(int i = 0; i < size; i++)
{
random_num = min_value + rand() % (max_value-min_value+1);
array[i]=random_num;
random_arr[i] += random_num;
}
// выводим массив на экран
for(int i = 0; i < size; i++)
{
//ТУТ ПРОБЛЕМА!!!
cout<<"["<<to_string(random_arr[i])<<"]";
// ТУТ ПРОБЛЕМА!!!
}
int max_element;
string array_str;
//находим наименьший элемент массива
int min_element = INT_MAX;
for(int i = 0; i<size; i++)
{
if(array[i] < min_element)
{
min_element = array[i];
}
}
cout<<"\nМинимальный элемент: "<<min_element;
for(int i = 0; i<size; i++)
{
if(array[i] > max_element)
{
max_element = array[i];
}
}
cout<<"\nМаксимальный элемент: "<<max_element;
}
Ответы (1 шт):
Боюсь в комментарий все не влезет, поэтому оформлю как ответ. У Вас есть несколько ошибок.
Вот этот код должен приводить к ошибки компиляции:
int size = 20;
int array[size];
т.к. при объявлении массива в квадратных скобках должна быть константа, т.е. нужно заменить на const int size = 20.
Как уже писали в комментариях,
random_arr- это строка,random_numпеременная типа int (т.е. целое число) и ее перед присвоениемrandom_arrнеобходимо привести к строке, например, как написано в комментариях, используя функциюto_string. Так же, такая записьrandom_arr[i]означает, что вы обращаетесь к конкретному элементу этой строки, что в данном случае не нужно, а добавление новой подстроки вrandom_arrможно сделать следующим образом:random_arr += ("[" + to_string(random_num)+"]");. И соответственно цикл, который у Вас вызывает проблему заменяется всего одной строкойcout << random_arr. Или можно избавиться от строкиrandom_arrсразу выводить элементы массива. Тогда ваш проблемный цикл будет выглядеть так:for(int i = 0; i < size; i++) { cout<<"["<<array[i]<<"]"; }
И, вроде, последнее - переменная
int max_elementу Вас не инициализирована, а значит строкаif(array[i] > max_element)также приведет к ошибке компиляции.