Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Multiple conditions with scanf in C

TLDR: I need to check if the input I am scanning with scanf into an array is really an integer while using EOF.

I need to scan numbers into an array until EOF. I am doing everything with statically allocated memory, since I am quite a beginner and for now dynamically allocated memory is hard for me to understand. I am also using getc to get the "\n" input at the end (but this is not a problem – just saying this so you know). My first thought how to do it is:

while(scanf("%d", &number[i][j]) != EOF )
**some code**

But this solution doesn’t check if the input is integer. For example if my input is.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

1 2 3
4 0 5
2 3 a

the code doesn’t stop, since the value of the last array is 0 until i scan a number into it. My solution to that is

while(1)
    if(scanf("%d", &number[i][j]) != 1)
        printf("Incorrect input.\n");
return 0;

but since the EOF is equal to -1, that means I am getting input even at the end of the file which I don’t want. So is there any way to have more conditions comparing the scanf? For example (I know this doesn’t work, but to help you understand what I mean):

while(1)
    if(scanf("%d", &number[i,j] != 1 && scanf("%d", &number[i,j]) != EOF)
        printf("Incorrect input.\n");
return 0;

but this "solution" takes the input twice. I also found some answers on this site suggesting to use other way of taking input instead of scanf but I need to specifically use the scanf function.

>Solution :

You can save the return value of scanf into a variable of type int and then perform further tests on it later:

int val, ret;

while ( ( ret = scanf( "%d", &val ) ) != EOF )
{
    if ( ret != 1 )
    {
        printf( "Incorrect input.\n" );
        exit( EXIT_FAILURE );
    }

    //input is ok, so do something with the input value
    DoSomethingWithValue( val );
}

//if this line of code is reached, then EOF has been encountered
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading