Вывод вообще не печатается

#c #arrays

#c #массивы

Вопрос:

 #include <iostream>
using namespace std;

int main() {
    long long t;
    long long * count= NULL;
    count=new long long[t];
   
    cin>>t;
    while(t--){
        long long n, i=0;
        long long * p= NULL;
        
        cin >> n;
        int c=0;
        
         p= new long long[n];
            for (i=0; i<n; i  )
                {
                cin >> p[i];
            }
            for (i=0; i<n; i  ){
                    if(p[i]>=p[i 1]){
                        c  ;
                        }
            }
        count[t]=c 1;
        
    }
   

 for(int i=0; i<t; i  ){
    std::cout<<count[i];
    cout<<"n";
    }

    return 0;
}
  

// Это мой код, и жирная часть не печатает массив count, пожалуйста, кто-нибудь может указать на ошибку, выходит ли массив count за рамки? //

Комментарии:

1. count=new long long[t]; какое значение t здесь??? И тогда какой размер count ?

2. count=new long long[t]; вы сделали это до того, как спросили значение t

3. Кстати, вы пропускаете назначенный буфер p . Хотя это может и не быть большой проблемой, потому что в задачах такого типа не будет слишком много ввода.

Ответ №1:

Вы не можете использовать значение переменной до того, как она получит значение.

 count=new long long[t];

cin>>t;
  

должно быть

 cin>>t;
count=new long long[t];
  

Вы сделали это правильно с p и n позже в коде.

Ответ №2:

Во-первых, вы сделали count=new long long[t]; это перед чтением значений t . Это означает, что вы использовали неопределенное значение неинициализированного t , что плохо. Эта строка должна быть после cin>>t; и перед while циклом.

Во-вторых, t -1 когда while цикл заканчивается, so i<t станет false. Вы должны где-то сохранить номер.

Попробуйте это (при условии, что вы хотите распечатать результаты в порядке ввода):

 #include <iostream>
using namespace std;

int main() {
    long long t;
    long long * count= NULL;
   
    cin>>t;
    count=new long long[t];
    int count_idx = 0;
    while(t--){
        long long n, i=0;
        long long * p= NULL;
        
        cin >> n;
        int c=0;
        
        p= new long long[n];
        for (i=0; i<n; i  )
        {
            cin >> p[i];
        }
        for (i=0; i<n; i  ){
            if(p[i]>=p[i 1]){
                c  ;
            }
        }
        count[count_idx  ]=c 1;
        
    }
    

    for(int i=0; i<count_idx; i  ){
        std::cout<<count[i];
        cout<<"n";
    }

    return 0;
}
  

В этом коде count_idx используется для сохранения того, куда записывать результаты, чтобы сохранить порядок, и он будет содержать количество данных, сохраненных в конце while цикла.
Также я исправил отступ.

Комментарии:

1. Большое спасибо! Действительно помогло!