w3resource

C fprintf() function

C library function - fprintf()

The fprintf() function is used for printing information to the screen.

Syntax:

int fprintf(FILE *stream, const char *format, ...)

Parameters:

Name Description
stream Identifies an address for a file descriptor, which is an area of memory associated with an input or output stream.
format The format argument is a string containing C language conversion specifications. The conversion specification specifies the notation, alignment, significant digits, field width, and other aspects of the output format. To represent non-printing characters, such as newlines and tabs, the format string may contain escape characters. Below are the details.
additional arguments Depending on the format string, the function may require additional arguments.

Format strings specify notation, alignment, significant digits, field width, and other aspects of output formats. It can contain ordinary alphanumeric characters; along with escape characters, conversion specifiers, and other characters, organized as shown below:

Flags

The alignment of the output can be controlled using any of the optional flags listed below:

Character Description Example
A plus sign (+) Always prints a sign character (+ or -). %+7.2d
A minus sign (-) Left-justifies the converted argument in its field. %-7.2d
Zero (0) Pad with zeros rather than spaces. %07.2d
Digits (field width) A digit string specifying the minimum number of digits to be printed. %6f
Digits (precision) A digit string including a period (.) specifying the number of digits to be printed to the right of the decimal point. %7.2f

Field Width and Precision Specifications

By including these options in the format string, you can control the width and precision of the output:

Character Description Example
Field width A digit string specifying the minimum number of digits to be printed. %5f
Precision A digit string including a period (.) specifying the number of digits to be printed to the right of the decimal point. %5.2f

Conversion Characters

The conversion characters specify the output notation:

Specifier Description
%c Single character
%d Decimal notation (signed)
%e Exponential notation (using a lowercase e as in 3.1415e+00)
%E Exponential notation (using an uppercase E as in 3.1415E+00)
%f Fixed-point notation
%g The more compact of %e or %f, as defined in [2]. Insignificant zeros do not print.
%G Same as %g, but using an uppercase E
%o Octal notation (unsigned)
%s String of characters
%u Decimal notation (unsigned)
%x Hexadecimal notation (using lowercase letters a-f)
%X Hexadecimal notation (using uppercase letters A-F)

Escape Characters

The following tables describe the non-alphanumeric characters found in format specification strings:

Character Description
\n New line
\t Horizontal tab
\b Backspace
\r Carriage return
\f Form feed
\\ Backslash
'' or '' (two single quotes) Single quotation mark

Return value

  • If successful, the total number of characters written is returned otherwise, a negative number is returned.

Example: fprintf() function

Following example create a file test.txt with the uses of fprintf() function.

#include <stdio.h>
int count [12] = {1}; 
int main(void) {
  int i, j;
  i = 100;
  FILE * stream;
  stream = fopen("test.txt", "w");
  fprintf(stream,"** Input text with integers using fprintf(): **");
  fprintf(stream,"\nTo output an integer, use %%d in the format string.");
  int num_of_employees = 203;
  fprintf(stream,"\nNumber of employees: %d ", num_of_employees); 
  fprintf(stream,"\nWe can specify the field width (i.e. how many 'spaces' the item prints in). Default is right-justification.");
  num_of_employees = 50;
  fprintf(stream,"\nNumber of employees: %8d ", num_of_employees); 
  fprintf(stream,"\nTo left justify, use a negative number in the field width:");
  fprintf(stream,"\nNumber of employees: %-8d ", num_of_employees); 
  fprintf(stream,"\nThe minimum number of characters required to print the item will be used if the field width is too small or left unspecified.");
  fprintf(stream, "\nNumber of employees: %2d", num_of_employees);
  fprintf(stream,"\n\n** Input text with Floating-point using fprintf(): **");
  double sale_amt = 345.27;
  fprintf(stream,"\nTo print floating point values in fixed notation, use the %%f modifier:");
  fprintf(stream,"\nYour sale amount is $%f today\n", sale_amt);
  fprintf(stream,"\nUse %e for exponential notation:");
  fprintf(stream,"Sale amount is %e today\n", sale_amt);
  fprintf(stream,"\nFurthermore, you can control the decimal precision, which refers to the number of places after the decimal point:");
  fprintf(stream,"\nThe output will be rounded to the appropriate number of decimal places, if necessary.");
  fprintf(stream,"\nSale amount is $%.2f today\n", sale_amt);
  fprintf(stream,"\nThe width of the field can also be controlled, as with integers:");
  fprintf(stream,"\nSale amount is $%9.2f today\n", sale_amt);
  fprintf(stream,"\n** Printing characters and strings: **");
  fprintf(stream,"\nFor characters, use the formatting specifier %%c. Default field size is 1 character");
  char ch = 'A';
  fprintf(stream,"\n%c%c%c\n", '*', ch, '*');
  fprintf(stream,"\nUse %%s%%s for printing strings. The same rules apply to field widths as they do to integers:");
  fprintf(stream,"\n%s%10s%-10sEND\n", "Red", "Green", "White"); 
 
  fclose(stream);
  FILE * fp;
  int c;
  fp = fopen("test.txt", "r");
  while (1) {
    c = fgetc(fp);
    if (feof(fp)) {
      break;
    }
    printf("%c", c);
  }
  fclose(fp);
  return (0);
}

Output:

Output of the said file data:
** Input text with integers using fprintf(): **
To output an integer, use %d in the format string.
Number of employees: 203
We can specify the field width (i.e. how many 'spaces' the item prints in). Default is right-justification.
Number of employees:       50
To left justify, use a negative number in the field width:
Number of employees: 50
The minimum number of characters required to print the item will be used if the field width is too small or left unspecified.
Number of employees: 50

** Input text with Floating-point using fprintf(): **
To print floating point values in fixed notation, use the %f modifier:
Your sale amount is $345.270000 today

Use 3.204834e-317 for exponential notation:Sale amount is 3.452700e+002 today

Furthermore, you can control the decimal precision, which refers to the number of places after the decimal point:
The output will be rounded to the appropriate number of decimal places, if necessary.
Sale amount is $345.27 today

The width of the field can also be controlled, as with integers:
Sale amount is $   345.27 today

** Printing characters and strings: **
For characters, use the formatting specifier %c. Default field size is 1 character
*A*

Use %s%s for printing strings. The same rules apply to field widths as they do to integers:
Red     GreenWhite     END

C Programming Code Editor:

Previous C Programming: C tmpnam()
Next C Programming: C sprintf()



Share this Tutorial / Exercise on : Facebook and Twitter

C Programming: Tips of the Day

What's an object file in C?

An object file is the real output from the compilation phase. It's mostly machine code, but has info that allows a linker to see what symbols are in it as well as symbols it requires in order to work. (For reference, "symbols" are basically names of global objects, functions, etc.)

A linker takes all these object files and combines them to form one executable (assuming that it can, i.e.: that there aren't any duplicate or undefined symbols). A lot of compilers will do this for you (read: they run the linker on their own) if you don't tell them to "just compile" using command-line options. (-c is a common "just compile; don't link" option.)

Ref : https://bit.ly/3CbzF8M