#### Reading Integers until End of file:↵
↵
~~~~~↵
int a[110];↵
for(i = 0; scanf("%d", &a[i]); i++);↵
~~~~~↵
↵
Because scanf will return the total number of input successfully scanned.↵
↵
#### Reading date↵
↵
~~~~~↵
int day, month, year;↵
scanf("%d/%d/%d", &month, &day, &year);↵
~~~~~↵
Helps when input is of format↵
↵
~~~~~↵
01/29/64↵
~~~~~↵
↵
↵
#### Read Binary string↵
↵
~~~~~↵
char str[20];↵
scanf("%[01]s", str);↵
printf("%s\n", str);↵
~~~~~↵
↵
**%[01]s** – Read only if you see 0’s and 1’s. Shorthand for matching characters in the seq [01] can also be extended for decimals using **%[0-9]s**. Similarly, **%[abc]s** – Read only if you see a, b, c. [...] read till these characters are found.↵
**[^...]** read until these characters are not found.↵
↵
↵
~~~~~↵
char s[110];↵
scanf(“%[^\n]s”, s);↵
~~~~~↵
↵
Here,we have **[^\n]**. The not operator **(^)** is used on the character **\n**, ↵
causes **scanf** to read everything but the character **\n** – which is ↵
automatically added when you press return after entering input.↵
↵
↵
#### Read but donot store. (use * assignment suppression character) ↵
~~~~~↵
scanf("%d %*s %d", &a, &b);↵
~~~~~↵
↵
The above segment can be used to read date format and do not store the month if the format is **dd month yyyy (06 Jan 2018)**.Read the desired input, but do not store.↵
↵
#### To read char↵
↵
~~~~~↵
char c;↵
scanf("%*[ \t\n]%c",&c);↵
~~~~~↵
↵
↵
~~~~~↵
scanf(“%2d”, &x);↵
~~~~~↵
↵
In this example we have, a number located between the **%** and **d** which ↵
in this case is 2. The number determines the number of integers our↵
variable input (of integer type) will read.↵
So if the input was “3222”, our variable would only read “32”.↵
↵
#### End of File↵
~~~~~↵
while (scanf() != EOF){↵
//do something↵
}↵
~~~~~↵
↵
↵
↵
#### Example from CP1↵
↵
Take this problem with a non-standard input format: the first line of input↵
is an integer N. This is followed by N lines, each starting with the character ‘0’, followed↵
by a dot ‘.’, then followed by an unknown number of digits (up to 100 digits), and finally↵
terminated with three dots ‘...’.↵
↵
#### Input:-↵
↵
~~~~~↵
3↵
0.1227...↵
0.517611738...↵
0.7341231223444344389923899277...↵
~~~~~↵
↵
One possible solution is as follows.↵
↵
~~~~~↵
#include <cstdio>↵
using namespace std;↵
↵
int N; // using global variables in contests can be a good strategy↵
char x[110]; // make it a habit to set array size a bit larger than needed↵
↵
int main() {↵
scanf("%d\n", &N);↵
while (N--) { // we simply loop from N, N-1, N-2, ..., 0↵
scanf("0.%[0-9]...\n", &x); // `&' is optional when x is a char array↵
// note: if you are surprised with the trick above,↵
// please check scanf details in www.cppreference.com↵
printf("the digits are 0.%s\n", x);↵
} } // return 0;↵
~~~~~↵
↵
Please feel free to add more in comments. Thank you for reading. **Learn and let learn**.↵
↵
↵
↵
↵
↵
~~~~~↵
int a[110];↵
for(i = 0; scanf("%d", &a[i]); i++);↵
~~~~~↵
↵
Because scanf will return the total number of input successfully scanned.↵
↵
#### Reading date↵
↵
~~~~~↵
int day, month, year;↵
scanf("%d/%d/%d", &month, &day, &year);↵
~~~~~↵
Helps when input is of format↵
↵
~~~~~↵
01/29/64↵
~~~~~↵
↵
↵
#### Read Binary string↵
↵
~~~~~↵
char str[20];↵
scanf("%[01]s", str);↵
printf("%s\n", str);↵
~~~~~↵
↵
**%[01]s** – Read only if you see 0’s and 1’s. Shorthand for matching characters in the seq [01] can also be extended for decimals using **%[0-9]s**. Similarly, **%[abc]s** – Read only if you see a, b, c. [...] read till these characters are found.↵
**[^...]** read until these characters are not found.↵
↵
↵
~~~~~↵
char s[110];↵
scanf(“%[^\n]s”, s);↵
~~~~~↵
↵
Here,we have **[^\n]**. The not operator **(^)** is used on the character **\n**, ↵
causes **scanf** to read everything but the character **\n** – which is ↵
automatically added when you press return after entering input.↵
↵
↵
#### Read but donot store. (use * assignment suppression character) ↵
~~~~~↵
scanf("%d %*s %d", &a, &b);↵
~~~~~↵
↵
The above segment can be used to read date format and do not store the month if the format is **dd month yyyy (06 Jan 2018)**.Read the desired input, but do not store.↵
↵
#### To read char↵
↵
~~~~~↵
char c;↵
scanf("%*[ \t\n]%c",&c);↵
~~~~~↵
↵
↵
~~~~~↵
scanf(“%2d”, &x);↵
~~~~~↵
↵
In this example we have, a number located between the **%** and **d** which ↵
in this case is 2. The number determines the number of integers our↵
variable input (of integer type) will read.↵
So if the input was “3222”, our variable would only read “32”.↵
↵
#### End of File↵
~~~~~↵
while (scanf() != EOF){↵
//do something↵
}↵
~~~~~↵
↵
↵
↵
#### Example from CP1↵
↵
Take this problem with a non-standard input format: the first line of input↵
is an integer N. This is followed by N lines, each starting with the character ‘0’, followed↵
by a dot ‘.’, then followed by an unknown number of digits (up to 100 digits), and finally↵
terminated with three dots ‘...’.↵
↵
#### Input:-↵
↵
~~~~~↵
3↵
0.1227...↵
0.517611738...↵
0.7341231223444344389923899277...↵
~~~~~↵
↵
One possible solution is as follows.↵
↵
~~~~~↵
#include <cstdio>↵
using namespace std;↵
↵
int N; // using global variables in contests can be a good strategy↵
char x[110]; // make it a habit to set array size a bit larger than needed↵
↵
int main() {↵
scanf("%d\n", &N);↵
while (N--) { // we simply loop from N, N-1, N-2, ..., 0↵
scanf("0.%[0-9]...\n", &x); // `&' is optional when x is a char array↵
// note: if you are surprised with the trick above,↵
// please check scanf details in www.cppreference.com↵
printf("the digits are 0.%s\n", x);↵
} } // return 0;↵
~~~~~↵
↵
Please feel free to add more in comments. Thank you for reading. **Learn and let learn**.↵
↵
↵
↵
↵