在ANSI C中打印字符

时间:2013-10-15 17:13:58

标签: c

我之前使用getchar和putchar成功地将输入的字符打印到屏幕上,但是我稍微更改了代码,现在它连续两次打印输入的字符。代码:

#include <stdio.h>

int main()
{
    int charInput;
    printf("Enter a char >> ");
    charInput = getchar();
    printf("%c", putchar(charInput));

    return 0;
}

我知道我可以在没有printf的情况下使用putchar,但我想尝试一下。我得到的输出是:

Enter a char >> a
aa

在屏幕上打印2个字符?

3 个答案:

答案 0 :(得分:4)

函数putchar(charInput)本身打印char 'a'并返回使用printf()打印为char的char的十进制等效值(例如ascii),因此总共打印了两个a。< / p>

阅读Manual page:

  

int putchar(int c);

     

功能,fputc()putc()putchar()putc_unlocked()和   putchar_unlocked() 返回书写的字符。如果有错误   发生时,返回值EOFputw()函数返回0   成功;如果发生写入错误或尝试是,则返回EOF   用来写一个只读流。

所以你可以假设:

printf("%c", putchar(charInput));
//      ^            ^ first `a` 
//      | second `a`

相当于:

temp = putchar(charInput);  // first `a`
printf("%c", temp);         // second `a`

答案 1 :(得分:2)

putchar(charInput)会打印一次你的角色,然后返回它的参数, charInput。然后将其传递给printf,再次打印相同的字符。

答案 2 :(得分:1)

这是因为一个来自printf而另一个来自putchar 只做这个

putchar(charInput);