fgetc, getc

Defined in header <stdio.h>
int fgetc( FILE *stream );
int getc( FILE *stream );
1) Reads the next character from the given input stream.
2) Same as fgetc, except that if getc is implemented as a macro, it may evaluate stream more than once, so the corresponding argument should never be an expression with side effects.


stream - to read the character from

Return value

On success, returns the obtained character as an unsigned char converted to an int. On failure, returns EOF.

If the failure has been caused by end-of-file condition, additionally sets the eof indicator (see feof()) on stream. If the failure has been caused by some other error, sets the error indicator (see ferror()) on stream.


#include <stdio.h>
#include <stdlib.h>
int main(void)
    int is_ok = EXIT_FAILURE;
    const char* fname = "/tmp/unique_name.txt"; // or tmpnam(NULL);
    FILE* fp = fopen(fname, "w+");
    if(!fp) {
        perror("File opening failed");
        return is_ok;
    fputs("Hello, world!\n", fp);
    int c; // note: int, not char, required to handle EOF
    while ((c = fgetc(fp)) != EOF) { // standard C I/O file reading loop
    if (ferror(fp)) {
        puts("I/O error when reading");
    } else if (feof(fp)) {
        puts("End of file reached successfully");
        is_ok = EXIT_SUCCESS;
    return is_ok;

Possible output:

Hello, world!
End of file reached successfully


  • C17 standard (ISO/IEC 9899:2018):
    • The fgetc function (p: 240-241)
    • The getc function (p: 242)
  • C11 standard (ISO/IEC 9899:2011):
    • The fgetc function (p: 330)
    • The getc function (p: 332)
  • C99 standard (ISO/IEC 9899:1999):
    • The fgetc function (p: 296)
    • The getc function (p: 297-298)
  • C89/C90 standard (ISO/IEC 9899:1990):
    • The fgetc function
    • The getc function

See also

reads a character from stdin
(removed in C11)(C11)
reads a character string from stdin
writes a character to a file stream
puts a character back into a file stream
C++ documentation for fgetc, getc

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.