c语言程序设计scanf,3.4 格式化输入函数scanf()

3.4格式化输入函数scanf()

scanf()函数的功能是从计算机默认的输入设备(一般指键盘)向计算机主机输入数据。

3.4.1scanf()函数的一般格式

调用scanf()函数的一般格式如下:

scanf("格式字符串",输入项地址表);

例如:

scanf("%d%f",&i,&f);

其中,“格式字符串”可以包含三种类型的字符:格式指示符、空白字符(空格、跳格键、回车键)和非空白字符(又称为普通字符)。格式指示符用来指定数据的输入格式;空白字符作为相邻两个输入数据的默认分隔符;非空白字符在输入有效数据时必须按原样一起输入。

“输入项地址表”由若干个输入项地址组成,相邻两个输入项地址之间用逗号分开。输入项地址表中的地址可以是变量的地址,也可以是字符数组名或指针变量(在后续章节中介绍)。变量地址的表示方法为“&变量名”,其中“&”是地址运算符。

在C++中,cin表示标准输入流对象,用于从键盘获取数据,“>>”是提取符,它将用户从键盘输入的数据赋给其后的变量,而且不像scanf()函数那样需要指定格式指示符,即“cin >>”语句可以为任何类型的变量获取数据,使用起来简单方便。例如,与上述语句等同功能的cin语句如下:

cin >> i >> f;

不过,由于定义提取符等包含在头文件iostream.h中,所以在使用“cin >>”语句时应包含“#include ”预处理命令。

3.4.2格式指示符

格式指示符的一般形式如下:

%[修饰符]格式字符

scanf()函数常用格式字符如表3-3所示。

表3-3scanf()函数常用格式字符

格式字符

说明

c

输入单个字符

d,i

输入有符号的十进制整数

o

输入无符号的八进制整数

x,X

输入无符号的十六进制整数

u

输入无符号的十进制整数

f

输入实数,可以用小数形式或指数形式输入

e,E,g,G

与f的作用相同,e与f、g可以互相替换

s

输入字符串,将字符串送到一个字符数组中,在输入时以非空白字符开始,以第1个空白字符结束,字符串以串结束标志'\0'作为其最后一个字符

1.宽度修饰

宽度修饰用来指定输入数据所占列数,例如:

scanf("%3c%3c",&ch1,&ch2);

假设输入“abcdefg”,则系统将读取的“abc”中的“a”赋给变量ch1,将读取的“def”中的“d”赋给变量ch2。

2.抑制修饰符

抑制修饰符“*”表示对应的数据读入后,不赋给相应的变量,该变量由下一个格式指示符输入。例如:

scanf(%2d%*2d%3d",&n1,&n2);

假设输入“123456789”,则系统将读取“12”并赋值给n1;读取“34”,但舍弃掉(“*”的作用);读取“567”并赋值给n2。

【程序3-4】当输入“11 22 33 44 55 66 77 88 99↙”时,以下程序的运行结果是什么?

/*文件名:chap03_4.cpp*/

#include

void main()

{

int n1,n2,n3,n4,n5;

scanf("%d%*d%d%*d%d%*d%d%*d%d",&n1,&n2,&n3,&n4,&n5);

printf("s1=%d,s2=%d\n",n1+n3+n5,n2+n3+n4);

}

程序运行结果:

s1=165,s2=165

程序中虽然要求输入9个整数,但对于所输入的第2、4、6、8个整数抑制了赋值,n1、n2、n3、n4、n5得到的值分别是11、33、55、77、99;n1+n3+n5=165、n2+n3+n4=165。

3.长度修饰符

在输入长整型数据和双精度实型数据时,必须使用长度修饰符“l”,否则不能得到正确的输入值。例如:

long x;double y;

scanf("%ld %lf",&x,&y);

3.4.3使用说明

调用scanf()函数输入数据时,要注意以下几点。

(1)如果相邻两个格式指示符之间不指定数据分隔符(如逗号、冒号等),则相应的两个输入数据之间至少用一个空格分开,或者用Tab键分开,或者输入一个数据后,按Enter键,然后再输入下一个数据。例如:

scanf("%d%d",&n1,&n2);

假设给n1输入10,给n2输入20,则正确的输入操作为:

10 20↙

或者:

10↙

20↙

(2)scanf()函数中没有精度控制,如scanf("%5.2f",&x);是错误的。不能企图用此语句输入小数为2位的实数。

(3)格式字符串中出现的普通字符(包括转义字符形式的字符)务必按原样输入。例如:

scanf("n1=%d,n2=%d",&n1,&n2);

假设给n1输入10,给n2输入20,正确的输入操作为:

n1=10,n2=20↙

另外,对于scanf()函数中格式字符串内的转义字符(如'\n'),系统并不把它当转义字符来解释,从而产生一个控制操作,而是将其视为普通字符,也要按原样输入。例如:

scanf("n1=%d,n2=%d\n",&n1,&n2);

假设给n1输入10,给n2输入20,正确的输入操作为:

n1=10,n2=20\n↙

为了改善人机交互性,同时简化输入操作,在设计输入操作时一般先用printf()函数输出一个提示信息,再用scanf()函数进行数据输入。例如:

printf("n1=");scanf("%d",&n1);

printf("n2=");scanf("%d",&n2);

(4)输入数据时,若遇到以下情况系统则认为该数据输入结束。

遇到空格或者回车键或者Tab键。

遇到输入域宽度结束。例如“%3d”,只取三列。

遇到非法输入。例如,在输入数值数据时,遇到字母等非数值符号(数值符号仅由数字字符0~9、小数点和正负号构成)。

(5)使用格式说明符“%c”输入单个字符时,空格和回车键符号等均作为有效字符被输入。例如:

scanf("%c%c%c",&ch1,&ch2,&ch3);

printf("ch1=%c,ch2=%c,ch3=%c\n");

假设输入A B↙,则系统将字母“A”赋值给ch1,空格赋值给ch2,“B”赋值给ch3。

【程序3-5】有以下程序:

/*文件名:chap03_5.cpp*/

#include

void main()

{

int i;

float f;

char c;

scanf("%d%c%f",&i,&c,&f);

printf("i=%d,c=%c,f=%f\n",i,c,f);

}

当输入100a1.234↙时,程序将100赋给整型变量i,'a'赋给字符型变量c,1.234赋给单精度型变量f,所以输出结果是:

i=100,c=a,f=1.234000

当输入1.23456↙时,程序将1赋给整型变量i,“.”赋给字符型变量c,23456赋给单精度型变量f,输出结果是:

i=1,c=.,f=23456.000000

【程序3-6】编写一个程序,输入弧度值,将弧度值换算成角度值(度、分、秒的形式)输出。

设x为弧度,则对应的角度为(180*x)/π,其整数部分为度,余下的小数部分乘以60取整数部分得到分,再将余下的小数部分乘以60取整数部分得到秒。程序如下:

/*文件名:chap03_6.cpp*/

#include

#define PI 3.14159

void main()

{

float x,a,a1;

int d,f,m;/*d为度,f为分,m为秒*/

printf("输入弧度:");

scanf("%f",&x);

a=x*(180.0/PI);

d=(int)a;/*取弧度*/

a1=(a-d)*60;

f=(int)a1;/*取分数*/

m=int((a1-f)*60+0.5);/*取秒数,0.5用于进行四舍五入计算*/

printf("%g <==> %d度%d分%d秒\n",x,d,f,m);

}

本程序的一次运行结果如下:

输入弧度:2.4↙

2.4<==> 137度30分36秒

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值