您当前的位置:首页 > 互联网教程

printf语句中的% c和% d是什么意思

发布时间:2025-05-24 10:32:34    发布人:远客网络

printf语句中的% c和% d是什么意思

一、printf语句中的% c和% d是什么意思

c语言中,%d和%.d的区别为:位数不同、精度不同、用途不同。一、位数不同1、%d:%d的输出值以有效值位数表示。2、%.d:%.d的输出值以输出格式位数表示,有效值位数不足输出格式位数则补0表示。二、精度不同1、%d:相同数值范围,%d的可表示精度比%.d要小,如2.3输出格式位数3位,%d的可表示精度为2.3。2、%.d:相同数值范围,%d的可表示精度比%.d要大,如2.3输出格式位数3位,%.d的可表示精度为2.30。三、用途不同1、%d:%d多用于对输出数值直接进行格式化输出。2、%.d:%.d多用于二次转换输出数值后进行格式化输出。[imdrp.c o m.cn]

二、node.js 有哪些全局对象

1、global最根本的作用是作为全局变量的宿主。按照ECMAScript的定义,满足以下条件的变量是全局变量:

2、隐式定义的变量(未定义直接赋值的变量)。

3、当你定义一个全局变量时,这个变量同时也会成为全局对象的属性,反之亦然。需要注意的是,在Node.js中你不可能在最外层定义变量,因为所有用户代码都是属于当前模块的,而模块本身不是最外层上下文。

4、注意:永远使用var定义变量以避免引入全局变量,因为全局变量会污染命名空间,提高代码的耦合风险。

5、process是一个全局变量,即 global对象的属性。

6、它用于描述当前Node.js进程状态的对象,提供了一个与操作系统的简单接口。通常在你写本地命令行程序的时候,少不了要和它打交道。下面将会介绍process对象的一些最常用的成员方法。

7、process.argv是命令行参数数组,第一个元素是 node,第二个元素是脚本文件名,从第三个元素开始每个元素是一个运行参数。

8、将以上代码存储为argv.js,通过以下命令运行:

9、$ node argv.js 1991 name=byvoid--v"Carbo Kuo"

10、'/home/byvoid/argv.js',

11、process.stdout是标准输出流,通常我们使用的 console.log()向标准输出打印字符,而 process.stdout.write()函数提供了更底层的接口。

12、process.stdin是标准输入流,初始时它是被暂停的,要想从标准输入读取数据,你必须恢复流,并手动编写流的事件响应函数。

13、process.stdin.on('data', function(data){

14、process.stdout.write('read from console:'+ data.toString());

15、process.nextTick(callback)的功能是为事件循环设置一项任务,Node.js会在下次事件循环调响应时调用 callback。

16、初学者很可能不理解这个函数的作用,有什么任务不能在当下执行完,需要交给下次事件循环响应来做呢?

17、我们讨论过,Node.js适合I/O密集型的应用,而不是计算密集型的应用,因为一个Node.js进程只有一个线程,因此在任何时刻都只有一个事件在执行。

18、如果这个事件占用大量的CPU时间,执行事件循环中的下一个事件就需要等待很久,因此Node.js的一个编程原则就是尽量缩短每个事件的执行时间。process.nextTick()提供了一个这样的工具,可以把复杂的工作拆散,变成一个个较小的事件。

19、functiondoSomething(args, callback){

20、我们假设compute()和somethingComplicated()是两个较为耗时的函数,以上的程序在调用

21、doSomething()时会先执行somethingComplicated(),然后立即调用回调函数,在 onEnd()中又会执行

22、compute()。下面用process.nextTick()改写上面的程序:

23、functiondoSomething(args, callback){

24、改写后的程序会把上面耗时的操作拆分为两个事件,减少每个事件的执行时间,提高事件响应速度。

25、注意:不要使用setTimeout(fn,0)代替process.nextTick(callback),前者比后者效率要低得多。

26、我们探讨了process对象常用的几个成员,除此之外process还展示了process.platform、 process.pid、process.execPath、process.memoryUsage()等方法,以及POSIX进程信号响应机制。

27、console用于提供控制台标准输出,它是由Internet Explorer的JScript引擎提供的调试工具,后来逐渐成为浏览器的事实标准。

28、Node.js沿用了这个标准,提供与习惯行为一致的 console对象,用于向标准输出流(stdout)或标准错误流(stderr)输出字符。 console.log():向标准输出流打印字符并以换行符结束。

29、console.log接受若干个参数,如果只有一个参数,则输出这个参数的字符串形式。如果有多个参数,则以类似于C语言 printf()命令的格式输出。

30、第一个参数是一个字符串,如果没有参数,只打印一个换行。

31、console.log('Hello world');

32、console.log('byvoid%diovyb');

33、console.log('byvoid%diovyb', 1991);

34、console.error():与console.log()用法相同,只是向标准错误流输出。

35、console.trace():向标准错误流输出当前的调用栈。

36、at Object.<anonymous>(/home/byvoid/consoletrace.js:1:71)

37、at Module._compile(module.js:441:26)

38、at Object..js(module.js:459:10)

39、at Module.load(module.js:348:31)

40、at Function._load(module.js:308:12)

41、at EventEmitter._tickCallback(node.js:192:40)

三、Node.js日志之winston使用指南

1、前面在《Node.js日志最佳实践指南》介绍了关于日志的最佳实现指南,本文将使用Winston库来构建一个简单的日志功能。

2、Winston是强大、灵活的Node.js开源日志库之一,理论上,Winston是一个可以记录所有信息的记录器。这是一个高度直观的工具,易于定制。可以通过更改几行代码来调整其背后的逻辑。它使对数据库或文件等持久存储位置的日志记录变得简单容易。

3、集中控制日志记录的方式和时间:在一个地方更改代码即可

4、控制日志发送的位置:将日志同步保存到多个目的地(如Elasticsearch、MongoDB、Postgres等)。

5、自定义日志格式:带有时间戳、颜色日志级别、JSON格式等前缀。

6、实践代码将在项目pretender-service中增加日志功能,安装依赖:

7、接下来需要初始化logger,由于项目中已经存在一个logger.js文件,这里再创建一个winstonLogger.js,代码如下:

8、通过调用winston库中的createLogger函数来初始化记录器。在transports对象中,可以提供一个文件名将日志存储在文件中。默认情况下,日志记录未格式化并打印为带有两个参数的JSON字符串,日志消息和等级。

9、下面对之前的logger进行修改,将winston日志记录器加入进去,具体修改方式参阅代码,下面给出其使用方法:

10、执行程序后可以会在根目录生成相应的日志文件logs/server.log

11、也可以更改日志级别,修改logger,只在console.error方式下使用winston:

12、记录了数据库连接错误信息,上面的信息仅只是为了演示。

13、winston允许设置多种transport,在winstonLogger.js中更改createLogger函数如下:

14、再次执行程序,将会看到error.log和info.log文件,由于在logger中未设置info,因此info.log的内容为空,error.log内容和上面的一样。

15、winston允许设置多个logger,在实际项目中可以为每个模块创建一个记录器logger,如下代码,创建一个用户日志记录器和登录验证记录器:

16、修改后代码创建了一个全局记录器globalLogger和一个鉴权记录器authLogger,对应修改logger.js:

17、正如前面介绍的最佳实践中提到的,按照特定的条件对日志文件进行分割,通常按照日期、大小进行分割,并设置保存的日志天数。为实现这些需求,要有一个安装一个Winston相关的依赖库。

18、安装完成后使用以下代码更新到winstonLogger.js文件:

19、至此,Winston的基本使用指南介绍完了,以上这些基本可以满足日常项目的需要了。