#c #variable-assignment #function-declaration #variable-length-array #incompatibletypeerror
#c #переменная-присвоение #объявление функции #массив переменной длины #ошибка несовместимого типа
Вопрос:
я хочу создать функцию на c с именем ‘losowanie’, эта функция должна рандомизировать n чисел между 0-n. Когда я вызываю эту функцию, я получаю :
error: incompatible types in assignment of ‘int’ to ‘int [n]’
Вот мой код :
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int losowanie (int tab[], int n) {
for(int i = 0;i<n; i ) {
tab[i] = rand() % n 1;
cout<<tab[i]<<endl;
}
}
int main()
{
int n = -1;
while(n<0 || n>50) {
cout<<"Give number ( 0 - 50)"<<endl;
cin>>n;
}
int tab[n];
tab = losowanie(tab, n); //here is error
return true;
}
Комментарии:
1. Похоже
losowanie
, предполагается заполнитьtab
массив на месте. Как вы думаете, что он должен возвращать?2. как сказал @BoBTFish,
losowanie
заполняет массив на месте, просто удалите это дополнительное присвоение переменной tab результата функции.losowanie(tab, n);
Также эта функция должна возвращать значение int (в настоящее время ничего не возвращает), а ваша вкладка представляет собой массив int
Ответ №1:
Для начала массивы переменной длины, подобные этому
int tab[n];
это не стандартная функция C . Вместо этого используйте стандартный контейнер std::vector
.
Этот цикл while
while(n<0 || n>50) {
позволяет ввести значение 0 для переменной n
. Однако вы не можете объявлять массив переменной длины с 0 элементами.
Функция losowanie
int losowanie (int tab[], int n) {
for(int i = 0;i<n; i ) {
tab[i] = rand() % n 1;
cout<<tab[i]<<endl;
}
}
имеет возвращаемый тип int
, но ничего не возвращает.
В этом операторе присваивания
tab = losowanie(tab, n);
левый операнд имеет тип int[n]
, в то время как возвращаемый тип функции int
. Таким образом, компилятор выдает ошибку, потому что это утверждение не имеет смысла. Массивы не имеют оператора присваивания.
Вы можете изменить тип функции с int
на на void
и удалить оператор присваивания.
Также вы должны использовать стандартную функцию C srand
для получения различных последовательностей случайных чисел.
Ответ №2:
losowanie возвращает int, но tab является массивом. Достаточно сделать losowanie для функции void.
void losowanie (int tab[], int n) {
for(int i = 0;i<n; i ) {
tab[i] = rand() % n 1;
cout<<tab[i]<<endl;
}
И, в основном:
int tab[n];
losowanie(tab, n);