C言語のプログラムの動作についての質問です

while((c=fgetc(fp))!=EOF){
if(iskanji(c)){
fputc(c,stdout);
fputc(fgetc(fp),stdout);
}

参考書のサンプルの一部です fpはFILE型のポインタです
ちなみにiskanji(c)についてはマクロで以下のように定義されてます
#define iskanji(c)\
(0x81 <= (c & 0xff)&&(c & 0xff) <= 0x9f || 0xe0 <= (c & 0xff) && (c & 0xff) <= 0xfc)

どうやらcがシフトジス漢字コードの一バイト目であるかをこれで判断するようです
真の場合ifの条件式以下の[]が実行されます

質問の内容は[]の動作です
fputc(c,stdout);
fputc(fgetc(fp),stdout);
私にはどちらの行も同じ動作をしているように思われます。
この部分の説明をお願いしたいです