C语言中的输出函数之putchar函数

·  阅读 459
  在c语言中,简单的输出函数包含printf,putchar,puts。接下来,我会尽我最大能力具体讲解这些函数中的putchar的作用,以及一些使用上的问题和解决方法。

 1.putchar函数

   我们首先从最简单的putchar函数开始。首先讲的是该函数的作用:将一个字符输出到标准输出流(你可能不知道什么是标准输出流,这里其实不用去理解什么是标准输出流,简单的理解为把一个字符输出到屏幕就行了)。 

  接下来让我们用例子来描述这个函数 

(1)简单的输出一个字符


#include <stdio.h>

int main(void)
{
	putchar("1");

	printf("\n");


	return 0;
}复制代码

这里的printf那行不用管它,它的作用就是换行,分开输出内容和程序运行完毕时编译器自动输出的内容,使输出时看的更简洁明了,如下,

没有 printf("\n");的输出结果:


有printf("\n");的输出结果:

这里的1是我们代码输出的结果,Press any key to continue则是程序运行完毕后编译器自行输出的东西,printf("\n");很好的分开了两者的输出;

(看到这里的人有可能觉得我讲的是废话,请见谅,我只是想详细的讲,因为刚入门学习c语言的人可能不知道后面这Press any key to continue是哪来的)


好,回到正题,代码里的putchar("1");输出了1,这就是putchar的一个用法,此外,输出字符1的方法还可以用putchar(49);代码和结果如下


#include <stdio.h>

int main(void)
{
	putchar(49);
	printf("\n");

	return 0;
}复制代码



这个输出结果和前面那个例子是一样的,究竟是为什么呢?


在讲这个问题之前,我先讲讲putchar的函数原型,putchar这个函数的函数原型是这样的:

int putchar(int c);

这行代码的意思是什么呢?这涉及到函数的定义,在之后有时间的时候我会写一篇关于函数定义的文章的,现在我就简单讲讲这int putchar(int c);的意思。首先看到第一个int,这个说明了这个函数返回的是1个int类型(即整型,表示一定范围内的整数,范围大小由机器位数以及编译器决定)的整数,我们看以下的例子,


#include <stdio.h>

int main(void)
{
	int a;

	a=putchar('1');
	
	printf("%d\n",a);

	return 0;
}
复制代码

它的输出结果如下


在这串代码内,我们定义了一个整型a,把putchar返回的int类型的值赋给了它,然后用printf来输出这个a的值,结果输出的是149。

为什么是149呢?

我们把这个代码写成下面那样,


#include <stdio.h>

int main(void)
{
	int a;

	a=putchar('1');
	
	printf("\n");

	printf("%d\n",a);

	return 0;
}
复制代码

结果如下图,



我们在赋值之后输出一个换行,这样就很容易讲明白了。我们仔细来讲讲。

首先,在定义了a这个整型之后,我们用了a=putchar('1');这行代码,这行代码许多人以为就是把putchar('1')这个函数返回的值赋给了a,但其实,在赋值之前,它先运行了等号右边的putchar('1')函数,所以先输出了个1,然后再把putchar返回的结果赋值给a,接着换行,再输出a的值,为49。所以上面的149其实是先输出了个1再输出49就变成了149,并不是说putchar返回的值是149,它返回的值其实是49。

那为什么是49呢?

最上面的例子表明了putchar('1'),putchar(49)输出的结果是一样的,后者括号里也是49,我们看会函数原型int putchar(int c),括号里定义了一个形式参数c,它的类型是整型,意思是说,要使用这个函数,括号里给的值必须是整型,而49就是一个整型的数,所以它可以用于putchar输出,那问题又来了,为什么括号里是'1'也能输出呢,这涉及到ASCII码,下图是ASCII码的图表,


(此图来源于百度百科)

看到十进制数49对应的就是字符1,所以说'1'和49其实是等价的,同理,看图表,'2'和50是等价的,'p'和112是等价的,所以说putchar('1')等价与putchar(49)。在ASCII表中,分有非打印控制字符和打印字符,其中前者的字符是不可以打印,后者可以打印,你可以用putchar(1),把里面的1换成1到31都试一下,你会发现,运行结果是有输出的,但并不是表上对应的字符,而32到127都可以输出表上对应的字符(127不知道什么回事,我的输出不了,这我就不懂了)(32输出的是空格,空格也是字符),然后数字再大一点,例如putchar(148451);,输出的就是一个汉字 鉖 ,具体的自己可以去百度了解以下。


(2)利用整型变量或字符变量输出字符

1.整型变量,代码如下


#include <stdio.h>

int main(void)
{
	int a=49;
	putchar(a);

	printf("\n");

	return 0;
}复制代码

输出结果为


很容易理解,定义一个整型变量a,把49赋值给它,再用putchar(a);输出,等价于putchar(49);


2.字符变量,代码如下


#include <stdio.h>

int main(void)
{
	char a='1';
	putchar(a);

	printf("\n");

	return 0;
}复制代码


输出结果为

也很同意理解,定义一个字符变量a,把'1'赋值给它,再用putchar(a);输出,等价于putchar('1');


2.常见问题

(1)putchar()括号里一定要是数字或者是''括着一个字符(一个字符,一个字符,一个字符,不是2个或以上或没有)

假如是


putchar('457');复制代码

输出的是7,输出的是最后面的数字,如果数字再多一定,例如


	putchar('457484');复制代码


编译时就会报错,错误信息为too many characters in constant;

而且'457'和'457484'这样写本身就是一个错误,单引号括的是1个字符,而不是多个字符,多个字符应该用""这对双引号来括,这样写就是对的,"457","457484",但是,这不代表着putchar("457484")和putchar("457")这样写就是对的,这样写的话编译时不会报错,会输出,但输出的是什么我不清楚,感兴趣的小伙伴可以自己研究下,然后告诉我结果哦,资源共享,嘻嘻,回到正题,编译时虽然不会报错,但它会提醒你'int ' differs in levels of indirection from 'char [7]'和different types for formal and actual parameter 1这两串英语,意思就是括号里应该给的时整型而不是字符串,这里的char[7]代表的就是一串大小为6个字符的字符串,如果是char[9]就是8个字符的字符串,char[18]为17个字符的字符串,以此类推。


(2)putchar()里面给了字符,而且是一个,但是报错了

原因:

1.你的字符没有用''这对单引号括上,或者是你用了中文的单引号,一定要用英文的单引号;你写了个putchar(a),其实你想的是输出a这个字符,但没有单引号,就会报错undeclared identifier;

2.报错undeclared identifier,表示未定义,括号里的变量没有定义,无法输出;




第一次写博客,如果写的不好,请见谅!!谢谢阅读。



分类:
阅读
标签:
分类:
阅读
标签:
收藏成功!
已添加到「」, 点击更改