从scanf ()的角度看输入
假定使用一个%d说明符来读取一个整数。Scanf ()函数开始每次读取一个输入字符,它跳过空白字符(空格。制表符。换行符)直到遇到一个非空白字符,如果是读取的是一个数字或者是一个符号,那适应能力就保存并读取下一个字符,如果接下来的字符是一个数字。也是保存并读取下一个字符直到读遇到一个非数字的字符,就得出结已到了整数的结尾产。Scanf ()把这个非数字的字符放回输入,这就意味着当程序下一次开始读取输入时,它将从前面被放弃的那个非数字字符开始。最后scanf ()将读取到的数字的相应值,存储到指定的变量中。如果使用了字段那么scanf ()在字段结尾或者在第一个空白字符处(二者中最先到达的一个)终止。
Scanf ()允许把普通字符放在格式字符串中,除了空格字符之外的普通字符一定要与输入字符串准确匹配。
Printf ()与scanf ()的*修饰符
Printf ()函数中的*修饰符:假定不想事先指定的字段,而是由程序来指定字段宽度。那么可以在字段宽度部分使用*代替数字来达到目的,但是必须使用一个参数来告诉函数字段宽度应该是什么。如%*d,那参数列表中应该包含一个*的值,一个为d的值。
//4-16.c ---- 使用可变宽度的输出字段
#include <stdio.h>
int main (void)
{
unsigned width,precision;
int number = 256;
double weight = 242.5;
printf ("What field width ?\n");
scanf ("%d",&width);
printf ("The number is :%*d:\n",width,number);
scanf ("%d %d",&width,&precision);
printf ("Weight = %*.*f\n",width,precision,weight);
return 0 ;
}
Scanf ()中*的作用是,当他放在%和说明符字母之间时,它使函数跳过相应的输入项目
//4-17.c ---跳过输入的两个整数
#include <stdio.h>
int main (void)
{
int n;
printf ("Please enter three integers:\n");
scanf ("%*d %*d %d",&n);
printf ("The last integer was %d\n",n);
return 0 ;
}