cinfinite

User Input of Integers Infinite Loop Until User Inputs a Character (C language)


User Input of Integers Infinite Loop Until User Inputs a Character (C)

int n = scanf("%d", &i);  
if (n == 1) {

can somebody explain me this part I am unable to understand why equality operator does not give false as output and jumps to else statement??

i am a beginner and don't much about these complicated syntax. Pls help me

   int n = scanf("%d", &i);  
    if (n == 1) {

if i give 5 as input then value of n will be 5 and when it goes to if statement then (5==1) will execute which will results as false but in this answer it not that case ?


Solution

  • No, that certainly is not the case. As per the man page:

    RETURN VALUE

    On success, these functions return the number of input items successfully matched and assigned; this can be fewer than provided for, or even zero, in the event of an early matching failure.

    So in the case of a single integer, if scanf was successful in reading and assigning it to a memory address as specified in the second argument, it will returns the number of elements successfully processed.

    Aside:

    You do not need to declare another variable and assign the return value of scanf to it, you could test for it directly:

    if (scanf("%d", &i) != 1) { 
        ..deal with invalid input..
    }