Question

My task is to create array, In order to do that I need to input size, but I have to make sure that the input isn't negative, letter or symbol. I created function to do that, but my if doesn't work properly. If I enter negative number or character it still uses it.

Here's the function which I use:

void getsize(int* size){
    printf("Enter the size of array\n");
  if ((scanf("%d", size) == 1) && (getchar() == '\n') && (size > 0)){
     printf("Size: %d entered\n", *size);
  } else {
   printf("wrong input\n");
   while(getchar() != '\n');
  }
}

getsize(&size);
Was it helpful?

Solution

The main problem is, you compare the address of the value to 0. size is a pointer, so use:

 (*size > 0)

instead of

 (size > 0)

OTHER TIPS

You are comparing the pointer with the 0, not the value you've stored inside the memory location it points to. Inside your if, rather use the following as your final comparison:

... (*size > 0)) { ... }

in your if statement. you are checking for size > 0 This should be *size > 0

void getsize(int* size){
    printf("Enter the size of array\n");
    if ((scanf_s("%d", size) == 1) && (getchar() == '\n') && (*size > 0)){
        printf("Size: %d entered\n", *size);
    }
    else {
        printf("wrong input\n");
        while (getchar() != '\n');
    }
}

This works for me. Just change size>0 to *size>0, because you must check the value, not the address.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top