为什么putchar(tolower(ch))打印掉每个角色中的两个?

-3 c tolower

这是我的代码,输出的每个字母都打印两次.它不是文本文件,它只在我插入我的putchar(tolower)语句时才会发生,但它的格式应该完全正确.这个陈述有什么问题?

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

#define MAX_STRING_SIZE 20
#define MAX_LIST_SIZE 50

int readFile(char *filename); /* function declaration for readFile, defined below */
void punct();

/* main function */
int main(int argc, char *argv[]) {
    if (argc < 2) {
        printf("%s: usage %s textFileName \n", argv[0], argv[0]);
        exit(1);
    }

    readFile(argv[1]);

    return 0;
}

int readFile(char *filename) {
    char ch;
    FILE *fPtr;

    fPtr = fopen(filename, "r"); /*open file filename, r is read only */
    if (!fPtr) {
        return 0;
    }

    while ((ch = fgetc(fPtr)) != EOF) {
        putchar(tolower(ch));
        printf("%c", ch);
    }

    fclose(fPtr);

    return 1; /* because success */
}
Run Code Online (Sandbox Code Playgroud)

sky*_*ack 5

输出的每个字母都打印两次

这两行:

putchar(tolower(ch));
printf("%c", ch); 
Run Code Online (Sandbox Code Playgroud)

打印两次相同的字符.

putchar将字符放入标准输出.
printf将格式化文本放入标准输出.在您的情况下,格式化的文本是在上面的行上打印的相同字符.

它只发生在我插入我的putchar(tolower)语句时

那是因为这样做实际上是你的输出加倍.