C语言中数据输入输出的实现

1.字符数据的输入输出

在 C 语言中,字符数据的输入输出主要通过标准库函数来实现。

输入

  • getchar() 函数用于从标准输入(通常是键盘)获取一个字符。

输出

  • putchar() 函数用于向标准输出(通常是屏幕)输出一个字符。

括号内可以是字符型变量或整型变量。

2.格式输入与输出 

1.格式输入输出主要通过scanf()printf()函数来实现

scanf()函数:用于从标准输入读取格式化的数据。

它的一般格式为:scanf("格式控制字符串", 地址列表)

printf()函数:用于向标准输出打印格式化的数据。

它的一般格式为:printf("格式控制字符串", 输出列表)

2.printf常用的格式字符及其含义

  • %d:以十进制形式输出带符号整数;
  • %u:以十进制形式输出无符号整数;
  • %f:以小数形式输出单精度或双精度实数;
  • %c:输出一个字符;
  • %s:输出字符串;
  • %p:输出指针地址;
  • %e%E:以指数形式输出实数,其中%e使用小写字母e%E使用大写字母E
  • %x%X:以十六进制形式输出无符号整数,其中%x使用小写字母a-f%X使用大写字母A-F
  • %o:以八进制形式输出无符号整数;
  • %g%G:根据数值的大小,自动选择%f%e(或%E)中较短的一种输出方式,且不输出无意义的零。

此外,还可以在%和格式字符中间插入格式修饰符,用于更精确地控制输出格式,常见的格式修饰符包括:

  • 标志字符
    • -:左对齐,默认为右对齐(当输出实际长度小于输出最小宽度时,右边补空格);
    • +:右对齐,正数输出+,负数输出-(当输出实际长度小于输出最小宽度时,左边补空格);
    • #:对于%o%x%X,输出前缀(如八进制的0、十六进制的0x0X);对于%f%e%E,强制输出小数点,即使后面没有数字;
    • 空格:正数输出空格,负数输出-
    • 0:当实际位数少于最小宽度时在前面补0
  • 输出最小宽度:用十进制整数表示输出的最少位数,若实际位数多于定义的宽度,则按实际位数输出,实际位数少于定义的宽度则补以空格或0
  • 精度:用“小数点”加“十进制正整数”表示,具体含义如下:
    • 对于整数(diouxX):表示输出的最小数字个数,不足则前面补零,超过则按原长度输出;
    • 对于浮点型(feE):表示小数点后至多输出的数字个数,不足则后面补数字0,多则做四舍五入处理;
    • 对于字符串(s):表示最多输出的字符个数,不足则后面补空格,多则截断;
  • 数据长度修饰符
    • h:表示以短整型或无符号短整型输出整数,或以单精度输出浮点数;
    • l(小写的L):表示以长整型或无符号长整型输出整数,或以双精度输出浮点数;
    • ll(两个小写的L):表示以 64 位长整型输出整数。

3.scanf常用的格式字符及其含义 

  scanf格式字符串的一般形式为:%(*)(输入数据宽度)(长度)格式字符,其中方括号()内的部分为可选项。各项的意义如下:

  1. 格式字符
  • u:读取一个十进制形式的无符号整数。
  • d:读取一个十进制形式的有符号整数。
  • o:读取一个八进制形式的整数。
  • xX:读取一个十六进制形式的整数,x使用小写字母,X使用大写字母。
  • feEgG:读取一个浮点数,可以是小数形式或指数形式。
  • c:读取一个字符。需注意,输入字符时,空格和回车键也会被当作有效字符输入。
  • s:读取一个字符串,遇到空白字符(空格、制表符、换行符)停止。
  • p:读入一个指针值。
  • n:不读入任何字符,而是把到该位置已读入的字符数存储到与之对应的int*指向的位置。若带有*或域宽信息(如%*n%3n等),其后果是未定义的。
  • %:读入%符号(百分号)。
  1. *:这是一个抑制符,用以表示输入的数据不赋值给相应的变量,即跳过该输入值。例如:scanf("%d%*d%d",&a,&b);,当输入为1 2 3时,把1赋予a2被跳过,3赋予b

  2. 宽度:用十进制整数指定输入的宽度(即字符数)。例如:scanf("%5d",&a);,输入12345678只把12345赋予变量a,其余部分被截去。

  3. 长度:长度格式符为lhl表示输入长整型数据(如%ld)、双精度浮点数(如%lf),或与cs配合使用表示对应宽字符(wchar_t)数据;h表示输入短整型数据。

4.使用printf和scanf的注意点

  1. 输入/输出的数据类型要与格式字符严格匹配,否则可能导致错误或未定义的行为。
  2. scanf函数要求提供变量地址,printf则直接使用变量名。
  3. 输入多个数据时,scanf格式控制串中若无间隔符,可用空格、制表符或回车键分隔;若有非格式字符作间隔符,则输入时也要加上相应字符。
  4. 对于scanf的字符输入,若格式控制串中无非格式字符,所有输入字符均有效;对于字符串输入(%s),要防止输入字符串过长导致缓冲区溢出。
  5. printfscanf函数均无精度控制,如scanf("%5.2f",&a);printf("%5.2f",a);都是非法的。
  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值