alphacentauri
alphacentauri

Reputation: 1020

How to correctly handle scanf()

I have to take input in the following format

S1 S2 S3

where S1 is a character and S2,S3 are integers for example

 3
 A 123 452
 D 450 53
 B 330 672

(where the '3' represents the number of queries) Now I've written the following code for it :

 while(i<=Q){
          scanf("%c %d %d",&ch,&index,&num);
          printf("%c %d %d\n",ch,index,num);
          i++;
 }

However, for the above shown three values I am getting the following output

 0 755130840
A 123 452

 123 452        

with an extra line at the top and that large value (here 755130840) changing every time.

Where am I going wrong?? I even tried scanning the 3 values individually and flushing the input stream before each scan statement. However, It doesn't help either.

Given the two blank lines, I believe the newline ('\n') is being stored in some variable.How do I handle it?

Upvotes: 0

Views: 112

Answers (2)

Sourav Ghosh
Sourav Ghosh

Reputation: 134286

do you want something like this?

#include <stdio.h>
#include <stdlib.h>

int main()
{

        int num, count, numone, numtwo;
        char charip;
        printf("Enter numbr of elem:\t");
        scanf("%d", &num);
        if (num < 0)
        {
                printf("Enter positive value!!!!!\n");
                exit (-1);
        }
        count = 0;
        while (count < num)
        {
                getchar();
                scanf ("%c %d %d", &charip, &numone, &numtwo)   ;
                printf("%c %d %d\n", charip, numone, numtwo);
                count++;
        }

        return 0;
}

Upvotes: 0

EmptyData
EmptyData

Reputation: 2576

Add a space before %c in scanf. This will allow scanf to skip any number of white spaces before reading ch. scanf with blank skips white space (including newlines) and reads the next character that is not white space.

Here is a code , this would be working fine.

#include <stdio.h>

int main(void) {
    // your code goes here
    int i =0;
    int Q = 2;
    char ch;
    int index;
    int num;
    while(i<=Q){
          scanf(" %c %d %d",&ch,&index,&num);
          printf("%c %d %d\n",ch,index,num);
          i++;
 }

    return 0;
}

Upvotes: 1

Related Questions