user6782645
user6782645

Reputation:

printf changes my output

I'm trying to solve this challenge on Hackerrank.

I've reached a problem where I cannot proceed, but I can't see where I've gone wrong - and I'm hoping someone here can help.

My current solution is as follows:

int main() {

    int n,k,p,count,total; 
    int t[n];
    scanf("%d %d",&n,&k);
    for(int i = 0; i < n; i++){
        scanf("%d",&t[i]);
    }
    p = 1;
    total=0;
    for(int x = 0; x < n; x++){
        for(int j = 1; j <= t[x]; j++, count++){
            if(count>k){
                count = 1;
                p++;
            }
            if(j==p){
                total++;
            }
            //printf("j: %d p: %d\tcount: %d\n",j,p,count);
        }
        p++;
        count=1;
    }
    printf("%d",total);

    return 0;
}

The printf that I have commented out is what changes my eventual output. For example, with an input of:

10 5

3 8 15 11 14 1 9 2 24 31

I should be getting an answer of 8. If I un-comment that printf() function, then I can see the current problem number and page number to see if it's 'special'. If I leave it un-commented, my eventual output is 8, which is what I want. But I don't want all the iterations printed out as well. The problem I have is that when I remove that line, or comment it out, the output becomes 5, not 8. What is causing this to change?

Upvotes: 1

Views: 1265

Answers (2)

AnilChalla
AnilChalla

Reputation: 43

array must be of fixed size you can create after reading number of elements n using calloc(),malloc()

Upvotes: 0

Sourav Ghosh
Sourav Ghosh

Reputation: 134336

In your code, while defining int t[n];, you're using n uninitialized. That , invokes undefined behavior.

To elaborate, n is an automatic local variable that is not initialized explicitly, so the content of that variable is indeterminate. Attempt to use an indeterminate value leads to UB.

Quoting C11, chapter §6.7.9

If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate. [...]

and, annex §J.2, undefined behavior,

The value of an object with automatic storage duration is used while it is indeterminate

You need to move the definition of int t[n]; after you have successfully scanned the value from the user. Check the return value of scanf() to ensure the success.

Upvotes: 4

Related Questions