#c #arrays #input
Вопрос:
Я думаю, что написал правильный код, но я ничего не могу ввести. Пожалуйста, помогите мне.
Вопрос — https://codeforces.com/problemset/problem/25/A
Мой код-
#include<iostream>
using namespace std;
int main(){
int n,count(0);
int arr[n];
for(int i=0;i<n; i){
cin>>arr[i];
}
for(int i=2; i<n; i){
if(arr[i]-arr[i-1] != arr[i-1]-arr[i-2]){
count;
}
}
cout<<count<<endl;
return 0;
}
Комментарии:
1.Примечание:
n
здесь неинициализировано, использованиеarr[n]
опасно и может привести к UB. Кроме того, массивы переменной длины (VLA) не являются частью стандарта C .2. Как вы думаете, сколько именно чисел будет введено этим кодом?
3. Используйте
std::vector
, когда вам нужно сохранить значения, но количество неизвестно во время компиляции. Используйте массивы, когда емкость известна во время компиляции.
Ответ №1:
Вероятно, это неопределенное поведение из-за того, что ваша int n
переменная неинициализирована. Инициализация n
до явного значения позволяет вводить данные по назначению.
Комментарии:
1. » Вероятно, это неопределенное поведение » Это не только вероятно. Это связано с неопределенным поведением. Простое чтение неинициализированных переменных вызывает неопределенное поведение в соответствии со стандартом.