《C语言解惑》—— 2.1 printf输出的小奥妙

简介:

本节书摘来自华章出版社《C语言解惑》一 书中的第2章,第2.1节,作者:刘振安 刘燕君,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.1 printf输出的小奥妙

需要注意printf输出字符串时,“n”之前和之后的空格含义不同,前面的空格没有影响,即如下两条语句

printf ("Hardness=%d   \n",2);
printf ("Hardness=%d\n ",2);

的输出是对齐的。而下面两条语句

printf ("Hardness=%d\n  ",2);
printf ("Hardness=%d\n ",2);

的输出是不对齐的,输出为

Hardness=2
  Hardness=2

即第2条语句前面的空格数由第1条语句“n”后面的空格数决定。当要输出多行左对齐的信息时,要特别注意。例如原来是想输出左对齐,但语句

double a=5.8,b=9.6;
printf ( "%f\n    ",a);
printf ( "%f\n",b);

的输出则为

5.800000
    9.600000

这是因为在两个双引号之间的空格也是输出信息的组成部分,输出换行之后,信息并没有输出完毕,后面的空格被输出到下一行,造成第2个输出语句从空格之后开始。看看下面程序的运行结果,就会恍然大悟。

#include <stdio.h>
void main()
{
     double a=5.8,b=9.6;
     printf ("a=%f\nb=%f\n",a,b);
     printf ("We are Here!\nWhere are you?\nBye!\n");
}

输出结果如下。

a=5.800000
b=9.600000
We are Here!
Where are you?
Bye!

printf函数的一般格式为
printf(格式控制,输出量表);
格式控制是用双引号(" ")引起来的字符串,也称“控制字符串”。它包括普通字符串和格式说明。其中普通字符串是需要原样输出的字符,遇到“n”则换到下一行。格式说明由“%”和格式符(d、f、c、s、o、x、u等)组成(如%d和%f等)。它的作用是将输出的数据转换为指定格式输出。格式说明总是由“%”字符开始,但必须符合要求。如下语句

int a=45;
printf("%%d\n",a);

多了一个“%”号,输出的结果就是错的。
【例2.1】能给出如下语句的输出结果吗?

#include <stdio.h>
void main()
{
    double a=5.8,b=9.6; int d=98; 
    char s='w',st[]="OK";
    printf ("a=%F\nb=%f\n",a,b);
    printf ("d=%D\nd=%d\n",d,d);
    printf ("s=%C\ns=%c\n",s,s);
    printf ("s=%S\ns=%s\n",st,st);
}

不能!因为格式符没有规定大小写之分,所以必须区别对待。以VC(Visual C的简写)为例,对于十进制数值,只能是小写字符,所以%F和%D是无效的。对字符而言,大小写均可(%c与%C等效),但对字符串,则只能用%s,不能用%S。不同的编译系统可能也有区别。虽然从下面的输出结果中可以看出一些规律,但变量d的地址与机器的硬件有关。

a=,b=5.800000
d=D,d=21
d=15,d=15
d=O,d=25
s=w,s=w
st=,st=OK
p=U,p=1245036

它们对小写总是有效的,所以不要去记它们,统一使用小写字母即可。另外,对格式符进行修饰的long,则既可以使用小写字母l,也可以使用大写字母L。
最容易混淆的还是%c和%s。程序语句

char c1='W',c2='e',st[]="We";
printf ("%c%c,%s\n",c1,c2,st);

的输出是“We,We”。不要混用格式符,下面的语句

double a=3.5;
printf("%d\n",a);

的输出结果是错的(输出0),原因是错用了格式符%d(应该使用%f)。

相关文章
|
11月前
13.C语言:用printf函数输出数据
13.C语言:用printf函数输出数据
210 0
|
8月前
|
存储 C语言
C语言数据类型、变量和运算符以及printf相关问题
C语言数据类型、变量和运算符以及printf相关问题
|
7月前
|
存储 C语言 数据格式
【C语言基础考研向】03混合运算和printf讲解
本文分为两部分。第一部分介绍了C语言中的混合运算与类型强制转换的重要性,通过实例展示了当整型数进行除法运算且结果为小数时,必须使用类型转换才能正确存储浮点数结果。第二部分详细讲解了`printf`函数的功能与使用方法,包括格式化输出不同类型数据的基本语法,并通过具体示例演示了如何利用字段宽度和对齐方式来控制输出格式,帮助读者更好地理解和掌握输出格式的控制技巧。
114 10
|
7月前
|
C语言
C语言程序设计核心详解 第三章:顺序结构,printf(),scanf()详解
本章介绍顺序结构的基本框架及C语言的标准输入输出。程序从`main()`开始依次执行,框架包括输入、计算和输出三部分。重点讲解了`printf()`与`scanf()`函数:`printf()`用于格式化输出,支持多种占位符;`scanf()`用于格式化输入,需注意普通字符与占位符的区别。此外还介绍了`putchar()`和`getchar()`函数,分别用于输出和接收单个字符。
109 5
|
6月前
|
C语言
初识C语言:与计算机的交流之输入与输出(scanf和printf)
初识C语言:与计算机的交流之输入与输出(scanf和printf)
386 0
|
11月前
|
存储 缓存 编译器
C语言第四弹---printf和scanf详解
C语言第四弹---printf和scanf详解
|
8月前
|
存储 缓存 编译器
【C语言篇】scanf和printf万字超详细介绍(基本加拓展用法)(下篇)
scanf处理⽤⼾输⼊的原理是,⽤⼾的输⼊先放⼊缓存,等到按下回⻋键后,按照占位符对缓存进⾏解读。 解读⽤⼾输⼊时,会从上⼀次解读遗留的第⼀个字符开始,直到读完缓存,或者遇到第⼀个不符合条件的字符为⽌。
256 2
|
8月前
|
存储 C语言
【C语言篇】scanf和printf万字超详细介绍(基本加拓展用法)(上篇)
printf 的作⽤是将参数⽂本输出到屏幕。它名字⾥⾯的 f 代表 format (格式化),表⽰可以定制输出⽂本的格式。
154 1
|
10月前
|
存储 C语言
C语言中的printf函数详解
C语言中的printf函数详解
356 0
|
10月前
|
C语言 C++
C语言printf()函数详解
C语言printf()函数详解