The C Programming Language练习1-10中碰到的一个关于for循环的有关问题

The C Programming Language练习1-10中碰到的一个关于for循环的问题。
题目要求如下:

/* 练习 1-10. 写一个程序,将输入拷贝到输出,将每个制表符替换为\t,将每个空格替换为\b,
将每个反斜杠替换为\\。这使得制表符和空格能够被明确地分辨出来。*/

我的程序如下:


#include <stdio.h>

int main()
{
    int c;
    //for ( ;(c = getchar()) != EOF; c = getchar()){
    for (c = getchar(); c != EOF; c = getchar()){
        if (c == '\t')
            printf("\\t");
        else if (c == ' ')
            printf("\\b");
        else if ( c == '\\')
            printf("\\\\");
        else
            putchar(c);
    }
    return 0;
}


上面的程序可以正常运行,也能够得到题目要求的结果。但是是一旦换成了如下程序就会出现问题。比如我测试输入1234,就会间隔的返回12或者34。还有就是CTRL+Z也无法结束程序了。希望各位帮助,谢谢了先~


#include <stdio.h>

int main()
{
    int c;
    for ( ;(c = getchar()) != EOF; c = getchar()){
    //for (c = getchar(); c != EOF; c = getchar()){
        if (c == '\t')
            printf("\\t");
        else if (c == ' ')
            printf("\\b");
        else if ( c == '\\')
            printf("\\\\");
        else
            putchar(c);
    }
    return 0;
}

------解决思路----------------------
for(表达式1;表达式2;表达式3)
{
    语句1;
}

//表达式2,表达式3每次都会执行,所以每次循环执行了两遍c = getchar()