dev-k
dev-k

Reputation: 3

"cout<<count<<endl;" isn't printing anything

cout<<count<<endl; sould provide an output according to the conditions , but it isn't printing anything, what is the fault/error/defects in the code that are causing such results ? it is my first question , sorry if i am not completely understandable.

i used the following code , i can't understand whats happening here.this is a simple input output question. the output provides us info about matching two team's uniform.

#include <stdio.h>
#include <iostream>

using namespace std;

main(){
    int a;
    cin>>a;
    int **b;
    b=new int*[a];
    for (int i = 0; i < a; i++)
    {
        b[i]=new int[2];
        for (int j = 0; j <2 ; j++)
        {
            cin>>b[i][j];
        }
    }

    int count=0;
    for (int i = 0; i < a*(a-1); i++)
    {   for (int j = 0; j < a; j++)
            if (b[i][0]==b[j][1])
                count=count+1;
    }
    cout<<count<<endl;

    for (size_t i = 0; i < a; i++)
    {
        delete b[i];
    }
    delete b;

}

input:

3
1 2
2 4
3 4

output does not contain anything

Upvotes: 0

Views: 860

Answers (1)

Ted Lyngmo
Ted Lyngmo

Reputation: 117643

You use the array out of bounds and delete when you should delete[]. Comments in code:

#include <iostream> // use the correct headers
#include <cstddef>

// not recommended: https://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice 
using namespace std;

int main() {  // main must return int
    size_t a; // better type for an array size
    cin >> a;
    int** b;
    b = new int*[a];
    for(size_t i = 0; i < a; i++) {
        b[i] = new int[2];
        for(size_t j = 0; j < 2; j++) {
            cin >> b[i][j];
        }
    }

    int count = 0;
    std::cout << a * (a - 1) << "\n"; // will print 6 for the given input
    for(size_t i = 0; i < a * (a - 1); i++) {
        // i will be in the range [0, 5]
        for(size_t j = 0; j < a; j++)             
            if(b[i][0] == b[j][1]) count = count + 1;
              // ^ undefined behaviour
    }
    cout << count << endl;

    for(size_t i = 0; i < a; i++) {
        delete[] b[i]; // use delete[] when you've used new[]
    }
    delete[] b; // use delete[] when you've used new[]
}

Upvotes: 1

Related Questions