scanf,printf函数细节

今天笔试的时候遇到一个考察C语言scanf函数的题目

int x;
float y;
scanf("%3d%f",&x,&y);
// input 123456 678 enter and then what's the value of x and y
printf("%d %f",x,y);

程序的执行结果是:

123 456.0000000

看来还是自己对scanf函数不是很了解,现在看看scanf函数的描述如下:

格式:既字符串序列,它控制从流中取出的字符是如何处理的。

空白字符:函数会读取并且忽略下一个非空白字符之前的任何一个空白字符(包括空格,换行,tab等字符)。格式字符串中的单个

空白字符使得从流中提取的任意数量的空白字符为一个。

非空白字符,除了格式指定(%):任何一个既不是空白字符又不是格式指定符中的部分(%开头的)会导致函数读取流中的下一个字符,

函数会比较该非空白字符和流中的字符,如果相等就抛弃这个字符并且读取下一个字符,如果不相等函数失败,返回,并且剩下的

子串没有读取。

格式说明符:一个由一个初始的百分比符号(%)形成的序列表示一个格式说明符,它用于指定从流中返回并且存储在在附加参数指定的

地址中的数据的类型和格式。

%[*][width][length]specifier

width:指定当前读操作所能读取的最大字符数目。

length:改变附加参数所指向存储区域的类型, 只能在hh, h, l, ll, j, z, t, L中选择一个。

在printf函数中,这个式子稍微有所不同,如下所示:

%[flags][width][.precision][length]specifier

flags:-,+,#,0,其中’-’用于左对齐,默认是右对齐;’-’用于给数字添加正负号;’#’用于%#o,%#x,%#X,这样给打印出的八进制,16进制添加前缀,o15,0x15;

’0’表示用0来替代对齐中的空格。

width:字符打印的时候指定最小的宽度,如果宽度不够就用空格代替.width也可以使用‘*’代替,此时需要在附加参数中额外用一个参数来指定*所

表的数组,示例如下:

printf("%*d%*d\n",7,5,3,4);

printf("%7d%3d\n",5,4);

这两行代码执行的结果完全相同。

.precision:小数点后对应的数字数目,如果不足的用0代替。也可以使用‘*‘来代替具体的数字,但是此时要在附加参数中指定‘*‘所指代的数字。

length:这个类似scanf中的length,就是用来修饰%后面的specifier,改变数据的类型。

时间: 2024-10-12 15:13:20

scanf,printf函数细节的相关文章

黑马程序员----printf函数和scanf函数

一.printf函数和scanf函数,都被定义在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>. 二.printf函数 1.定义:printf()函数是格式化输出函数, 一般用于向终端按规定格式输出信息; 2.格式:printf("XXXXXXXX"); 三.scanf函数 1.定义:scanf()函数按用户指定的格式从键盘上把数据输入到指定的变量之中; 2.格式:scanf("%d", &numbe

scanf,printf函数的返回值

参考自:https://www.douban.com/note/220299804/ scanf函数的返回值有三种情况: (1)第一种就是返回一个正整数,表示输入成功元素的个数. (2)第二种如果返回的值为0,代表输入不匹配,没有正确输入任何值,所以有了下面的代码. (3)第三种返回-1(EOF)也就是输入流结束.Windows:CTRL + Z表示输入结束,Linux:CTRL + D. printf函数的返回值为输出元素的个数.printf("%d\n", 1);  //2 #in

【C/C++】scanf,printf 函数

摘自http://www.cplusplus.com 1. scanf 函数 int scanf ( const char * format, ... ); Parameters format C string that contains a sequence of characters that control how characters extracted from the stream are treated: Whitespace character: the function wil

scanf函数和printf函数

C程序实现输出和输入的 主要是printf函数 和 scanf函数,这两个函数是格式输入输出 格式声明由%和格式字符组成 如%d,%f 格式字符:  d格式符:用来输出一个有符号的十进制整数  c格式符:用来输出一个字符  s格式符:用来输出一个字符串 f格式符:用来输出实数(包括单精度,双精度,长双精度) 隐含输出六位小数  e格式符:用格式声明%e指定以指数形式输出实数  i格式符:作用与d格式符相同,一般习惯用%d,而少用%i.  o格式符:以八进制的形式输出  u格式符:用来输出无符号(

学C第5天(printf函数,scanf函数)

一.格式 1.%d格式 %[-]d      左对齐     %[m]d      以m指定的字段宽度输出,数据的位数小于m,左端补空格     %[0m]d     以m指定的字段宽度输出,数据的位数小于m,则左端补0     %[l]d    输出长整型整数     %[-m]d  左对齐,忽视0或空格 int num = 1000;     printf("%-d", num);//1000     printf("\n%10d", num); //     

scanf和printf函数的返回值

<span style="font-size:24px;color:#000099;"> scanf函数返回的是输入值的个数 而printf函数则是返回打印字符的个数 特别注意的是 \t 也只是表示的是一个字符<img src="http://img.blog.csdn.net/20150422143816136?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhvdTc1MzA5OTk0Mw==/font/5a

scanf函数与printf函数用法

一开始学习就是用的cin.cout,所有习惯用这个,但是后来做题发现这样的输入方式有弊端,所以决定整理熟悉一下scanf函数与printf函数. 头文件 # include <stdio.h> scanf("输入控制符",输入参数) 在 scanf 的“输入参数”中,变量前面的取地址符&不要忘记. scanf 中双引号内,除了“输入控制符”外什么都不要写. “输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要一一对应. “输入控制符”的类型和变量所定义

C 中 关于printf 函数中度剖析

题外话  这篇博文主要围绕printf函数分析的,主要讲解printf 使用C的可变参数机制, printf是否可重入(是否线程安全), printf函数的源码实现. 正文 1.C中可变参数机制 我们先举个例子,假如现在有这样一个需求 "需要一个不定参数整型求和函数". 具体实现代码如下 // 需要一个不定参数整型求和函数 int sum_add(int len, ...) { int sum = 0; va_list ap; va_start(ap, len); // 初始化 将ap

C 的printf函数

头文件 #include <stdio.h> printf函数是最常用的格式化输出函数,原型为:int printf(char *format,......); printf函数会根据参数format字符串来转换并格式化数据,然后输出 参数format字符串可包含下列三种字符类型: 一般文本,将直接输出 ASCII控制字符,即转义符 格式转换字符 格式转换字符为一个百分比符号(%)及其后的格式字符所组成.每个%符号在其后都必须有一个参数与之相呼应 整数: %d 会被转换为有符号的十进制数字 %