Menu Close

printf()函数和scanf()函数的区别

变量值,变量名和变量地址
变量值,变量名和变量地址

scanf 的 长度修饰符 和 转换说明符 与 printf 几乎相同。主要的区别如下:

长度修饰符 :(可选项)对于 float 与 double 类型,printf() 的转换说明都用 f; 而对于 scanf() ,float 保持不变,double 要在 f 前加长度修饰符 l ,即:lf

例 1

#include<stdio.h>

int main(void) {

   double a = 3.0;
   double b;

   scanf("%lf", &b); // 把键盘输入的数字赋值给a
   printf("%lf\n", a);
   printf("%lf", b);
   return 0;
}
15
3.000000
15.000000

scanf 函数遵循什么规则来识别整数或浮点数呢?

在要读入整数时,scanf 函数首先会寻找正号或负号,然后从读入一个数字开始直到读入一个非数字为止。

当要求读入浮点数时,scanf 函数首先会寻找正号或负号(可选),然后是一串数字(可能含有小数点),再后是一个指数(可选)。指数由一个字母e,可选的符号,一个或多个数字组成。

当 scanf 函数遇到一个不可能输入当前项的字符时,它会把此字符“放回原处”,以便在扫描下一项或下一次调用 scanf 时再次读入。

易混淆的 printf() 与 scanf()

  1. printf("%d", &i);

    输出的并不是 i 的值 (而是 i 的地址的十进制数值)

  2. scanf("%d, %d", &i, &j);

    scanf 在第一个 %d 读入一个整数后,试图把逗号与输入流中的下一个字符相匹配,如果这个字符不是 ,,那 scanf 就会终操作,而不再读取变量 j 的值。

  3. scanf("%d\n", &i);

    printf 函数中经常有 \n ,但是如果在 scanf 格式串结尾放一个 \n 通常会引发你预期之外的问题。

    对于 scanf 函数来说,\n 等同于空格,那么 scanf 就会在流中寻找空白字符,但是我们上面说过,scanf 格式串中的空白字符会与 输入流中的零个或多个空白字符匹配。所以当你输入完成后按下回车,这个回车会与 scanf 中的 \n 匹配,之后你无论打多少回车都不会使 scanf 结束,除非你输入一个非空字符,使 scanf 因匹配失败而退出。

 

除教程外,本网站大部分文章来自互联网,如果有内容冒犯到你,请联系我们删除!

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

Leave the field below empty!

Posted in C语言教程

Related Posts