Reading input in C using scanf()
Reading Input in C using scanf()
In C programming, `scanf()` is a commonly used function for reading input from the user. It allows you to read input of various types, including integers, floating-point numbers, characters, and strings.
The Basics of scanf()
The basic syntax for using `scanf()` is as follows:
scanf("format string", &variable);
The "format string" is a string of characters that specifies the type and format of the input you want to read, and the `&variable` argument is the address of the variable where you want to store the input.
For example, if you want to read an integer input and store it in a variable named `num`, you can use the following code:
int num;
scanf("%d", &num);
The `%d` format specifier tells `scanf()` to read an integer input, and the `&num` argument is the address of the `num` variable where the input should be stored.
Reading Strings with scanf()
To read a string input with `scanf()`, you can use the `%s` format specifier. For example, the following code reads a string input and stores it in a character array named `str`:
char str[50];
scanf("%s", str);
The `%s` format specifier reads a string of characters until a whitespace character (such as a space or newline) is encountered, and stores it in the character array.
However, this method of reading strings can be problematic because it is susceptible to buffer overflow vulnerabilities. If the user inputs a string that is longer than the size of the character array, it can cause the program to crash or behave unpredictably.
To avoid this issue, you can use a modified format specifier that specifies the maximum number of characters to read. For example, if you want to read a string of up to 50 characters, you can use the following code:
char str[50];
scanf("%49s", str);
Here, the `49` before the `%s` format specifier tells `scanf()` to read up to 49 characters (leaving one character for the null terminator) and store them in the `str` character array.
Reading Multiple Lines of Input with scanf()
Sometimes, you may need to read input that spans multiple lines. In such cases, you can use the `%[^\n]` format specifier to read a sequence of characters until a newline character is encountered.
For example, the following code reads input that spans multiple lines and stores it in a character array named `str`:
char str[100];
scanf("%[^\n]", str);
Here, `%[^\n]` reads a sequence of characters until a newline character is encountered, and stores them in the `str` character array.
However, there is one issue with using `%[^\n]` to read input that spans multiple lines. When `scanf()` encounters a newline character, it stops reading input but leaves the newline character in the input stream. This can cause problems when trying to read the next input.
To avoid this issue, you can use the `%*c` format specifier to discard the newline character. For example, the following code reads input that spans multiple lines and discards the newline character:
char str[100];
scanf("%[^\n]%*c", str);
Here, `%[^\n]` reads a sequence of characters until a newline character is encountered, and `%*c` discards the newline character that was left in the input stream.
Discarding Input with scanf()
Sometimes, you may need to discard input for various reasons, such as skipping over whitespace characters or reading input in a specific format.
To discard input with scanf(), you can use the %* format specifier. The asterisk (*) tells scanf() to discard the input instead of storing it in a variable.
For example, the following code discards the first character of input:
char ch;
scanf("%*c%c", &ch);
Can be better, but okay
ReplyDelete