goksurahsan Ответов: 3

Visual studio, код ошибки: C2466 и C2057


Я хочу написать кодовый блок. Этот код блокирует печать обратного номера и номера шага, когда я ввел номер. Я использую visual studio. И я получил две ошибки.

Что я уже пробовал:

Всем привет, я новичок в языке Си. Я хочу написать кодовый блок. Этот код блокирует печать обратного номера и номера шага, когда я ввел номер. Я использую visual studio. И я получил две ошибки.

Один из них: C2466 не может выделить массив постоянного размера 0
Другое: C2057 ожидаемое постоянное выражение


Программа, которую я написал, такова::

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

int findNumberSteps(int comingNumber)
{
	int count = 0;
	while (comingNumber > 0)
	{
		comingNumber /= 10;
		count++;
	}
	return count;
}

void reversedNumber(int numberReceived)
{

	int stepsNumbers = 2;
	stepsNumbers = findNumberSteps(numberReceived);
	int numbers[stepsNumbers];
	int stepNumber = 0;
	do {
		stepNumber++;
		numbers[stepNumber - 1] = numberReceived % 10;
		numberReceived /= 10;
	} while (numberReceived > 0);

	for (int i = 0; i <= stepsNumbers; i++)
	{
		printf("%d", numbers[i]);
	}


	/*int remain;
	while (numberReceived > 0)
	{
		remain = numberReceived % 10;
		numberReceived /= 10;
		printf("%d", remain);
	}*/
}



int main()
{
	setlocale(LC_ALL, "Turkish");
	int numberEntered = 0;
	do
	{
		printf("Please enter a positive number:\n");
		scanf_s("%d", &numberEntered);
		printf("\n");
	} while (numberEntered <= 0);

	printf("%d has %d steps.\n\n", numberEntered, findNumberSteps(numberEntered));

	printf("The number that is reversed number you entered: ");
	reversedNumber(numberEntered);
	printf("\n");


	return 0;
}



Как я могу исправить эти ошибки?

3 Ответов

Рейтинг:
20

OriginalGriff

C-это старый язык: он не позволит вам создать массив "на лету", как это.
Вместо этого вам нужно будет использовать malloc, чтобы выделить достаточно места (т. е. количество элементов, умноженное на размер целого числа) и назначить его вашей переменной. И не забудьте освободить память, когда она будет закончена!

void reversedNumber(int numberReceived)
{
	int stepsNumbers = 2;
	stepsNumbers = findNumberSteps(numberReceived);
	int *numbers = (int*) malloc (stepsNumbers * sizeof(int));
...
	free(numbers);
}


goksurahsan

Спасибо за ответ

OriginalGriff

Всегда пожалуйста!

Рейтинг:
0

Xanith

В

int numbers[stepsNumbers];
stepsNumbers должен быть константой, доступной во время компиляции.

Я бы предложил либо динамически распределять память, либо еще лучше использовать вектор<int> и нажимать числа, которые вы хотите добавить, а затем всплывать, когда вы хотите их получить.


Richard MacCutchan

Вы, конечно, правы. Но это C, а не C++, поэтому он не может использовать вектор.

Рейтинг:
0

Richard MacCutchan

Вы не сказали нам, на каких линиях это произошло, поэтому я предполагаю, что это так

int numbers[stepsNumbers];

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


goksurahsan

Да, эта линия

Richard MacCutchan

Вышеизложенное решение см. Xanith по.