为什么我输出最后一个字符时会得到不同的结果?

时间:2014-11-12 05:22:28

标签: c++ c linux

我已经运行了这个程序,下面是我的输入和输出:

a b     g
^Z
the counts of blanks are: 1,the counts of tabs are: 1,the counts of newlines are
: 1,the lastchar is:   10
g: 103
char type of lastchar is:

Press any key to continue

我的问题是我认为我的lastchar是'但是为什么当我输出lastchar时我得到10,为什么当我直接输出' g时为什么我得到103?更进一步,当我输出lastchar的char(%c)类型时,为什么我什么都没得到?

#include<stdio.h>
#include<conio.h>
int main(void)
{
    int blanks=0,tabs=0,newlines=0;
    int c;
    int done=0;
    int lastchar=0;


    while((c=getchar())!=EOF)
    {
        if(c==' ')
        {
            blanks++;
        }
        if(c=='\t')
        {
            tabs++;

        }
        if(c=='\n')
        {
            newlines++;
        }
        lastchar=c;


    }

    char tt='g';


    if(lastchar!='\n')
    {
        newlines++;
    }


    printf("the counts of blanks are: %d,the counts of tabs are: %d,the counts of newlines are: %d,the lastchar is: %4.0d\n",blanks,tabs,newlines,lastchar);
    printf("g: %d\n",'g');
    printf("char type of lastchar is: %c\n",lastchar); 
    return 0;




}

1 个答案:

答案 0 :(得分:2)

这里:

printf("g: %d\n",'g');

您要求printf()输出'g'的数字表示(很可能是ASCII),即103。

下面:

printf("char type of lastchar is: %c\n",lastchar); 

您要求printf()输出lastchar作为字符。由于数值是10,这是换行符,因此换行符是不可打印的字符。