@Radia
Анимешник, который мечтает создать свою игру.

Почему программа падает при вводе отрицательного числа?

Цель кода такова: сначала надо ввести размер массива, который меньше 1000 и больше 1, а затем элементы самого массива которые больше -1000 и меньше 1000. В результате должно вывести самое маленькое число. Все бы нормально, но когда я ввожу отрицательные числа, программа падает.

#include <iostream>
#include <cmath>
using namespace std;
int main() {
	int N = 0;
	float nums[N];	
	float n;	
	
	cin >> N;
	
	if(N >= 1 && N <= 1000) {
		for(int i = 0; i < N; i++) {
			cin >> n;
			if(n > (-1000) && n < 1000) { 
				nums[i] = n;
			} 
		}
		int min = nums[0];
		for(int i = 1; i < N; i++) {
			if(nums[i] < min) {
				nums[i] = min;
			}
		}
		cout << min;	
	} 
}
  • Вопрос задан
  • 106 просмотров
Решения вопроса 2
@Griglapidus
Ваш код не может нормально работать хотя бы потому что вы создаете массив nums[N]; с N=0;. Когда вы в него пишете, каждый раз рискуете поймать ошибку доступа к памяти.
При нахождении минимального значения вы явно опечатались nums[i] = min;, должно быть наоборот))
int min = nums[0];. min должен быть тоже float, иначе вы получите немного не то что ожидаете.
Ответ написан
RiseOfDeath
@RiseOfDeath
Диванный эксперт.
Вы объявляете массив нулевого размера (не поверю что компилятор вам об этом не показал ворнинг), а потом пытаетесь писать куда-то. Вообще странно что она у вас не всегда падает т.к. должна падать с сегфолтом при любом введённом N от 1 до 1000.

А вообще учитесь пользоваться отладчиком и смотреть что у вас происходит и где, когда что-то работает не так, как надо.

p.s.
Ну и на будущее - а не лень вам будет вбивать каждый раз руками исходные данные? проще читать их из файла или передавать в командной строке.

p.p.s.
И на будущее не плохобы научиться читать варнинги и ошибки компилятора. А если что-то спрашиваете приводить их текст, а так же введенные вами входные данные, полученный результат и какой результат по-вашему должен был быть. (например ввел 1, 2, 3, 4. Должен был получить 10, а получил 5.)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@TheCalligrapher
В языке С++ не разрешается использовать неконстантые выражения в качестве размера при объявлении массива. Поэтому ни о каком "все нормально пока я не введу отрицательные числа" речи быть не может. Ваш код не является кодом на С++ вообще. Нужно все переделывать с самого начала.

В качестве массива используйте std::vector<double>. И, разумеется, не float, а double. Почему у вас в коде вдруг используется тип float?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы