geekdoc-python-zh/docs/overiq/013.md

6.6 KiB
Raw Permalink Blame History

使用 C 语言格式化输入和输出

原文:https://overiq.com/c-programming-101/formatted-input-and-output-in-c/

最后更新于 2020 年 9 月 24 日


格式化的输入和输出允许程序员以特定的方式执行输入和输出。

格式化整数输入

%wd

这里%d是整数的转换规格,w表示输入数据的最大宽度。如果输入的长度大于宽度,则值存储不正确。

让我们举一些例子:

scanf("%2d%3d", &a, &b);

在这种情况下,变量a的宽度为2b的宽度为3

ab的值可以通过以下方式输入:

案例 1:

当输入的数据长度小于字段宽度时,输入值将正确存储在给定的变量中。

输入: 4 34

这种情况下,4存储在a中,34存储在b中。

现在试试

案例 2:

当输入的数据长度等于字段宽度时,输入值将正确存储在给定的变量中。

输入: 23 456

这种情况下,23存储在a中,456存储在b中。

现在试试

情况 3: 当输入的数据长度大于字段宽度时,则输入值没有正确存储在给定的变量中。

输入: 234 99

由于a的宽度为 2因此只有23存储在a中,4存储在b中,而其余的输入被忽略。

现在试试

格式化整数输出

%wd

在这种情况下,w表示数据的最小宽度,d表示整数。如果变量的长度小于宽度,则该值将打印为右对齐,并带有前导空格。例如:

情况 1: 当变量长度小于指定宽度时。

printf("a=%2d,b=%3d", a, b);

如果a = 4b = 23,那么输出将是:

预期输出:

a=4,b=23

现在试试

在这种情况下,为第一个变量指定的宽度是 2输出的长度只有 1 位(因为数字是4),因此在4之前增加了一个前导空格。空格字符用字符表示。同样,第二个变量的宽度是 3而输出的长度只有 2 位数(因为数字是23,所以再次在23之前添加一个前导空格。

情况 2: 当变量的长度等于指定的宽度时,不添加前导空格。

printf("a=%3d,b=%4d", a, b);

如果a = 456b = 2234,那么

预期输出:

a=456,b=2234

情况 3: 当变量的长度大于指定的宽度时,不管变量的长度如何,输出都会被正确打印。

printf("a=%2d,b=%3d", a, b);

如果a = 1221b = 19234,那么

预期输出:

a=1221,b=19234

格式化浮点输入

%wf

这里w是指定输入数据最大宽度的整数,包括小数点前后的数字和小数本身。

情况 1: 当输入数据的长度小于给定的宽度时,则值被正确地存储在给定的变量中。

scanf("%3f%4f", &a, &b);

输入: 4 1.2

在这种情况下,第一个变量的最大宽度是 3而输入的长度是 1类似地第二个变量的宽度是 4而输入的长度是 3。因此这些值被正确地存储在变量中。即a = 4b = 1.2

情况 2: 当输入数据的长度等于宽度时,则值被正确地存储在变量中。

scanf("%3f%4f", &a, &b);

输入: 1.2 33.1

在这种情况下,输入的宽度和长度是相同的,因此值被正确地存储在变量中。即a = 1.2b = 33.1

情况 3: 当输入数据的长度大于指定的宽度时,这些值不会正确存储在变量中。

scanf("%3f%4f", &a, &b);

输入: 5.21 983.71

由于第一个变量的宽度为 3因此只有5.2存储在变量a中,而1存储在b中,其余的输入被忽略。

格式化浮点输出

%w.nf

w是输出数据的最小宽度,n是小数点后要打印的位数。请注意,宽度包括小数点前后的数字和小数本身。

情况 1: 当输出数据的长度小于指定的宽度时,则数字用前导空格右对齐。

printf("a=%5.1f, b=%5.2f", a, b);

其中a = 3.1b = 2.4

预期输出:

a=••3.1, b=2.40

在这种情况下,变量的宽度a是 5输出数据的长度是 3这就是为什么在3.1之前增加了两个前导空格。同样,变量b的宽度是 5输出数据的长度是 3但是由于小数点后要打印的位数是 2所以在2.4之前只添加了一个前导空格。

情况 2: 当数据的长度等于指定的宽度时,则打印的数字没有任何前导空格。

printf("a=%4.2f, b=%4.2f", a, b);

其中a = 32.1b = 45.11

预期输出:

a=32.10, b=45.11

情况 3: 当数据的长度大于指定的宽度时,则打印数字时没有任何前导空格。

printf("a=%5.2f, b=%4.3f", a, b);

其中a = 34189.313b = 415.1411

预期输出:

a=34189.31, b=415.141

格式化字符串输入

%ws

这里w指定要存储在变量中的输入长度。

char str[20];
scanf("%4s", str)

**注意:**C 中的字符串被声明为字符数组,我们将在第课【C 中的字符串基础】中学习更多关于数组和字符串的知识。如果输入是earning,那么变量str中只存储earn

格式化字符串输出

%w.ns

w是弦的宽度。wn后的点(.)字符可选。如果存在,将仅显示n字符,并在字符串前添加(w-n)前导空格。另一方面,如果只指定了字符串的宽度(即w),并且字符串的长度小于指定的宽度,则输出将使用前导空格右对齐。否则,不添加前导空格。案例 1:

printf("%4s", "codeindepth");

预期输出:

codeindepth

这里字符串的宽度小于输入的长度,所以字符串将被打印出来,没有前导空格。

案例 2:

printf("%10s", "code");

预期输出:

•••••••code

这里字符串的宽度是 10长度是 4所以字符串将打印 6 个前导空格。

案例 3:

printf("%10.3s", "code");

预期输出:

•••••••cod

这里输出的宽度是 10但是.3表示只显示 3 个字符。字符串的长度为 4因此只会显示"cod"和 7 (10-3=7)个前导空格。

案例 4:

printf("%.6s", "codeindepth");

预期输出:

codein

这里没有指定输入的宽度,但是.6表示无论输入字符串的长度是多少,都只显示字符串的前 6 个字符。在下一章中,我们将学习中的运算符和表达式。