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)); } } ```