c – Difference between scanf() and fgets()

c – Difference between scanf() and fgets()

There are multiple differences. Two crucial ones are:

  • fgets() can read from any open file, but scanf() only reads standard input.
  • fgets() reads a line of text from a file; scanf() can be used for that but also handles conversions from string to built in numeric types.

Many people will use fgets() to read a line of data and then use sscanf() to dissect it.

int scanf(const char * restrict format, ...);

scanf(3) searches for certain pattern defined by the format argument on the given input known as stdin, where the pattern is defined by you. The given input to scanf(3), depending on its variant (scanf, fscanf, sscanf, vscanf, vsscanf, vfscanf), could be a string or a file.

char *fgets(char * restrict str, int size, FILE * restrict stream);

fgets(3) just reads a line from the input file stream and copy the bytes as null terminating string to the buffer str and limit the output to the buffer to given bytes in size.

c – Difference between scanf() and fgets()

Scanf does not perform bounds checking. fgets is likely going to be the better choice. You can then use sscanf() to evaluate it.

Good discussion of the topic here-

How do you allow spaces to be entered using scanf? (That was my evil twin getting lectured for forgetting this- not me)

Leave a Reply

Your email address will not be published.