1 函数原型
putchar():将一个字符写入到标准输出流stdout,函数原型如下:
int putchar(int character);
cstdio库描述如下:
1. Writes a character to the standard output (stdout).
2 参数
putchar()函数只有一个参数character,类型为int型:
- 当传递给putchar()函数的实参值在0~127之间时,转换为字符后输出;
- 当传递给putchar()函数的实参值在128~255之间时,在VS2019下无打印。
cstdio库描述如下:
1. The int promotion of the character to be written.
2. The value is internally converted to an unsigned char when written.
第1条的意思是:先将字符由char类型整形提升为int类型。
第2条的意思是:再将int转换为unsigned char(所以,实际传递给putchar()函数的值在0-255之间)。
3 返回值
putchar()函数的返回值类型为int型:
- 写入成功,返回传递给putchar()函数的实际值,范围在0~255之间;
- 写入失败,返回EOF。
cstdio库描述如下:
1. On success, the character written is returned.
2. If a writing error occurs, EOF is returned and the error indicator (ferror) is set.
4 示例
4.1 示例1
以ASCII码值和字符常量的形式输出单个字符,代码如下所示:
int main()
{
//
int x = 97;
putchar(x);
printf("\n");
//
char y = 'a';
putchar(y);
printf("\n");
return 0;
}
代码运行结果如下图所示:
4.2 示例2
读取字符串"hello world"并打印,代码如下所示:
int main()
{
//
char ch = 0;
while ((ch = fgetc(stdin)) != '\n' && ch != EOF)
{
putchar(ch);
}
//
printf("\n");
//
return 0;
}
代码运行结果如下图所示:
4.3 示例3
参数c的值大于255时,代码如下所示:
int main()
{
int ret = 0;
//
printf("putchar(97) = ");
ret = putchar(97);
printf("\nreturn value = %d\n\n", ret);
//
printf("putchar(353) = ");
ret = putchar(353);
printf("\nreturn value = %d\n\n", ret);
//
printf("putchar(197) = ");
ret = putchar(197);
printf("\nreturn value = %d\n\n", ret);
//
printf("putchar(453) = ");
ret = putchar(453);
printf("\nreturn value = %d\n\n", ret);
//
printf("putchar(-1) = ");
ret = putchar(-1);
printf("\nreturn value = %d\n\n", ret);
return 0;
}
代码运行结果如下图所示:
代码及运行结果分析:
- 当参数c的值=97,97%256=97,在0~127之间,转换为对应的字符’a’后输出;
- 当参数c的值=353,353%256=97,在0~127之间,转换为对应的字符’a’后输出;
- 当参数c的值=197,197%256=197,在128~255之间,实际输出时什么都没有显示;
- 当参数c的值=453,453%256=197,在128~255之间,实际输出时什么都没有显示;
- 当参数c的值=-1,对应的无符号整形值为4,294,967,295(int类型占4个字节),模256后等于255,在128~255之间,实际输出时什么都没有显示。
该示例主要用于验证putchar()函数将传递给它的参数转换为unsigned char类型,实际使用时不会直接给putchar()函数传递数值,且是值不在0-255范围类的数值(包括负值)。