Store data in array from input

arrays, c

Solution

`\n` in `scanf` was the problem

#include<stdio.h>
int main()
{
    int marks[3];
    int i;

    for(i=0;i<3;i++)
    {
        printf("Enter a no\n");
        scanf("%d",(marks+i));
    }

    printf("\nEntered values:\n");
    for(i=0;i<3;i++)
    {
        printf("%d\n",*(marks+i));
    }

    return 0;
}

Reason:

I expect only `3` values is stored in an array but it stores 4 values and in next 'for' loop as expected show 3 values. My Question is why in 1st 'for' loop it takes 4 values instead of 3?

First: No, it only stores `3` number but not `4` numbers in array `marks[]`.

Second: interesting to understand loop runs only for three times for `i = 0` to `i < 3`. The for loop runs according to condition. More interesting code is stuck in `scanf()` as described below:

Your confusion is why you have to enter four numbers, its not because you loop runs `4` times but its because `scanf()` function returns only when you enter a non-space char (and after some enter press you inputs a number symbol that is non-space char).

To understand this behavior read manual: `int scanf(const char *format, ...);`:

A sequence of white-space characters (space, tab, newline, etc.; see `isspace(3)`). This directive matches any amount of white space, including none, in the input.

Because in first for loop's, in `scanf()` you have included `\n` in format string, so `scanf()` returns only if press a number enter (or a non-space key).

 scanf("%d\n",(marks+i));
           ^
           |
            new line char 

What happens?

Suppose input to program is:

23        <--- because of %d 23 stored in marks[0] as i = 0
<enter>   <--- scanf consumes \n, still in first loop
543       <--- scanf returns, and leave 542 unread, 
                               then in next iteration 543 read by scanf in next iteration
<enter> 
193
<enter>  <--- scanf consumes \n, still in 3rd loop
<enter>  <--- scanf consumes \n, still in 3rd loop
123      <--- remain unread in input stream 

Problem

I'm beginner in C. Please dont mind if my question is lame. In this program which i have written, when I use 'for' loop first time , I expect only 3 values is stored in an array but it stores 4 values and in next 'for' loop as expected show 3 values. My Question is why in 1st 'for' loop it takes 4 values instead of 3? ``` #include<stdio.h> void main() { int marks[3]; int i; for(i=0;i<3;i++) { printf("Enter a no\n"); scanf("%d\n",(marks+i)); } for(i=0;i<3;i++) { printf("%d\n",*(marks+i)); } } ```

Original source

Related problems