数据的输入输出

本文详细介绍了C语言中的数据输入输出,包括输入/输出的概念、格式化输入与输出函数scanf和printf的使用,以及字符和字符串数据的输入输出函数getchar、putchar、gets和puts。内容涵盖格式控制字符、变量地址、输入输出注意事项等。
摘要由CSDN通过智能技术生成

  第一部分 数据输入/输出地概念及其在C语言中的实现

  C语言中输入输出是以计算机为主体的。输入是指从标准输入设备(键盘)为程序中不同类型的变量赋值,输出是指向标准输出设备(显示器)输出表达式的值。

  第二部分 数据的格式化输入

 格式输入函数scanf,功能是按用户指定的格式,从键盘上把输入输入到指定的变量中。

 2.1 格式化输入的格式

 1.格式

scanf函数是一个标准库函数,它的函数原型在头文件“stdio.h”中,他是从键盘上输入的数据按指定的格式赋给相应的输入项。一般格式为:

  scanf("格式控制字符串","输入项列表");

  其中,格式控制字符串的作用是控制输入项列表中各输入项的输入格式,但不能显示非格式字符串,也就是不能显示提示字符串。提示字符串一般包括普通字符串和格式控制字符串。输入项列表则由一个或多个变量的地址组成,当变量地址有多个时,各变量地址之间必须用逗号“,”分隔。变量地址是由地址运算符“&”后跟变量名组成的。这个地址就是编译系统在内存中分配的地址。

 2.地址的概念 

 变量的地址是C编译系统分配的,用户不必关心具体的地址是什么。

 变量的地址和变量值的关系如下:

   &a----->a 567

 a为变量名,567为变量的值,&a是变量a的地址。在scanf语句的格式中,输入时要用一个以上的空格或<Enter>键作为每两个输入数之间的间隔。

 2.2 格式控制字符和普通字符

 1.格式控制字符

 格式控制字符串规定了输入项中变量以何种类型的数据格式被输入,应包括由“%”引导的修饰符和格式字符。其一般格式如下:

 %[<修饰符>]<格式字符>

 说明:方括号中的内容为可选项。

1)格式字符及其意义

格式字符

意义

d

输入一个十进制整数

0

输入一个八进制整数

x

输入一个十六进制整数

f

输入一个小数形式的浮点数

e

输入一个指数形式的浮点数

c

输入一个字符

s

输入一个字符串

2)修饰符的可选项,可以有也可以没有,如果有修饰符,则它可以是:

A. 修饰字段宽度的数字

 用十进制整数指定输入的宽度(即字符串)。例如,scanf("%3d","&a");指按宽度3输入一个整数赋给变量a.

B. 字符l和h

 可以和d、0、x一起使用,加l表示输入长整数类型(如%ld)和双精度浮点数(如%lf)。加h表示输入的数据为短整型数据,例如,scanf("%10ld%hd",&x,&i);表示x按宽度为10的长整数读入,而i按短整型读入。

C. 字符*

 “*”表示输入该字符值后,不将该值赋予相应的变量,即跳过该输入值。例如,scanf("%4d%*d%4d"&x,&y,&z,);执行该语句,若输入为:1 2 3,则结果为x=1,z=3,y未赋值,2被跳过。

3)使用scanf函数须注意以下几点:

 A. scanf函数中没有精度控制,如scanf("%5.2f",&a);是非法的。不能企图用此语句输入小数位为2位的整数。

 B. sacnf中要求给出变量地址,若给出变量名则会出错。如scanf("%d",a);是非法的,应改为scanf("%d",&a);才是合法的。

 C. 在输入多个数值数据时,若格式控制串中没有非格式字符作为输入数据之间的间隔,则可用空格,<Tab>键或<Enter>键作为间隔。C编译在碰到空格,<Tab>键或<Enter>键或非法数据(如对"%d"输入"12A"时,A即为非法数据)时即认为该数据输入结束。

 D. 在输入字符数据时, 若格式控制串中无格式字符,则认为所有输入的字符均为有效字符。

 如:

   scanf("%c%c%c",&a,&b,&c);

  输入为:d e f  则把'd'赋给a,' '空格赋给b,'e'赋给c.只有输入def时,才会把'd'赋给a,'e'空格赋给b,'f'赋给c。如果在格式控制中加入空格作为间隔,如scanf("%c %c %c",&a,&b,&c);则输入时各数据之间必须加空格。

例1:scanf函数输入字符时的技巧1

 

#include<stdio.h>

main(){

char a,b;

printf("input character a,b/n");

scanf("%c%c",&a,&b);

printf("%c%c/n",a,b);

}运行结果为:

 input character a,b

 M N

 M

 input character a,b

 MN

 MN

 由于scanf函数"%c%c"中没有空格,输入M N时,输出结果只有M,因为N接受的是空格。而当输入MN时,则可输出MN两个字符。

 例2:scanf函数输入字符时的技巧2

 

#include<stdio.h>

main(){

char a,b;

printf("input character a,b/n");

scanf("%c %c",&a,&b);

printf("/n%c%c/n",a,b);

}

运行结果为:

 

input character a,b

 M N

 MN

 本例表示scanf格式控制串"%c %c"之间有空格,输入的数据之间也必须有空格间隔。

 E. 如果格式控制串中有非格式字符,则输入时必须输入该给格式字符。

 如:

    scanf("%d,%d,%d",&a,&b,&c); 其中用非格式符“,”作为间隔符,故输入时的格式应为:5,6,7

 又如:

    scanf("a=%d,b=%d,c=%d",&a,&b,&c); 输入时的格式应为:a=5,b=6,c=7

 F. 如输入的输入和输出地类型不一致,虽然能够通过编译,但结果却不正确。

 例3:输入的数据和输出的类型一致性问题

 

#include<stdio.h>

main(){

int a;

printf("input a number/n");

scanf("%d",&a);

printf("%ld/n",a);

}

运行结果为:
input a number
12345567678
44332456
 由于输入数据的类型为整形,而输出语句的格式串中说明输出结果的类型为长整型,因此输出结果和输入结果不符,需对程序进行改进。
  例4:当输入数据的类型改为长整型后,输入输出结果相等。
#include<stdio.h>
main(){
long a;
printf("input a number/n");
scanf("%ld",&a);
printf("%ld/n",a);
}
运行结果为:
input a number
1234567890
1234567890
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值