C语言输出与输入函数(详解)

输出函数printf()

定义

1、用printf()函数作用将所要输出的内容打印到屏幕当中,printf是由print format两个单词组成,表示定制输出⽂本的格式。

#include <stdio.h>
int main(){
    printf("hello world");
     return 0;
}

该代码会在屏幕上输出hello world
printf() 函数不会在⾏尾⾃动添加换⾏符,运⾏结束后,光标就停留在输出结束的地⽅,不会⾃动换
⾏。
为了让光标移到下⼀⾏的开头,可以在输出⽂本的结尾,添加⼀个换⾏符\n.

#include <stdio.h>
int main(){
    printf("hello world\n");
     return 0;
}

如果文本内部要求换行,可以用换行符来实现。

#include<stdio.h>
int main(){
    printf("hello\nworld");
    return 0;
}

2、注意:
用printf()函数需要在文件头部加上库文件stdio.h

puts()函数

puts()函数可以顺利输出作为实参的字符串,并在结尾中换行。puts(“…”)与printf(“…\n”)功能基本相同。
当需要换行且不需要格式化输出时,可以用puts()函数代替printf()函数。
示例:

#include <stdio.h>
int main() {
    int num = 0;
    puts("请输入一个整数。");
    printf("num:");
    scanf("%d",&num);
}

在这里插入图片描述

占位符

1、说明:所谓占位符就是这个位置可以被其他值代替;输出函数printf()和输入函数scanf()都需要用到占位符。
2、看代码

#include <stdio.h>
int main(){
    printf("My lucky numbers are %d ",9);
    return 0;
}

上述代码"My lucky numbers are %d"就是要输出的内容,而%d要被9代替,输出结果为"My lucky numbers are 9。
3、语法格式:第一个字符为百分号% ,第二个字符表示为占位符的类型。如%d表示整型数字,%c为字母等。
4、输出文本可以有多个占位符

#include<stdio.h>
int main(){
    printf("%s have %d apples\n","xiaoming",3);
    return 0;
}

该代码中有两个占位符,第一个占位符为%s表示字符串,第二个占位符为%d表示整数,分别对应第二个参数为"xiaoming"和第三个参数为3,输出结果为xiaoming have 3 apples。
4、 printf() 参数与占位符是⼀⼀对应关系,如果有n个占位符,那么就有n+1个参数。如果参数个数少于对应的占位符,占位符就会被内存中的某个值代替。

其他占位符

• %a:⼗六进制浮点数,字⺟输出为⼩写。
• %A:⼗六进制浮点数,字⺟输出为⼤写。
• %c:字符。
• %d:⼗进制整数。
• %e:使⽤科学计数法的浮点数,指数部分的e为⼩写。
• %E:使⽤科学计数法的浮点数,指数部分的E为⼤写。
• %i :整数,基本等同于%d。
• %f:⼩数(包含float类型和double类型)。
• %g:6个有效数字的浮点数。整数部分⼀旦超过6位,就会⾃动转为科学计数法,指数部分的e为⼩写。
• %G:等同于%g,唯⼀的区别是指数部分的E为⼤写。
• %hd :⼗进制shortint类型。
• %ho:⼋进制shortint类型。
• %hx :⼗六进制shortint类型。
• %hu:unsignedshortint类型。
• %ld:⼗进制longint类型。
• %lo:⼋进制longint类型。
• %lx:⼗六进制longint类型。
• %lu:unsignedlongint类型。
• %lld:⼗进制longlongint类型。
• %llo:⼋进制longlongint类型。
• %llx:⼗六进制longlongint类型。
• %llu:unsignedlonglongint类型。
• %Le:科学计数法表⽰的longdouble类型浮点数。
• %Lf:longdouble类型浮点数。
• %o:⼋进制整数。
• %p:指针。
• %s:字符串。
• %u:⽆符号整数(unsignedint)。
• %x:⼗六进制整数。
• %zd:size_t 类型。
• %%:输出⼀个百分号。

输出格式

printf()函数可以定制占位符的输出格式。

限定宽度

printf() 允许限定占位符的最小宽度。

#include <stdio.h>
int main(){
    printf("%5d",123);
}

上述中,%5d表示最小宽度为5位,不足时在前面补上空格。对齐方式默认为右对齐,及输出内容前面会有空格。上述代码结果为 123,123前面有两个空格。
对于小数,这个限定符会限制所有数字的最小显示宽度。

#include<stdio.h>
int main(){
    printf("%12f",0.123);
}

上述中,%12f表示最小宽度为12位。由于小数点后面默认要有6位,所以0.123输出的结果头部需要添加4个空格。

限定小数位数

输出小数时,有时需要限制小数的位数,举例说明,若要限制小数点后只有三位,占位符写上%.3f。

//输出0.210
#include <stdio.h>
int main(){
   printf("%.3f",0.21);
}

上⾯⽰例中,如果希望⼩数点后⾯输出4位(0.2100),只要将占位符写成%.4f即可。

这种写法可以与限定宽度占位符,结合使用

#include <stdio.h>
int main(){
     printf("%5.2f",2.13);
     return 0;
}

上面示例中,%5.2f 表示输出字符串最小宽度为5,小数位数为2。所以,输出字符串的头部空格添加一个。

最小宽度和小数位数这两个限定值,都可以用*代替,通过printf()参数传入。

#include <stdio.h>
int main(){
    printf("%*.*f",5,2,2.13);
}
//相当于%5.2f

上述示例中,%*.*两个星号被printf()两个参数5和2传入。

输入函数scanf()函数

当我们有了变量时,我们需要从键盘上输入值给变量,这个时候可以使用scanf()函数。

#include <stdio.h>
int main(){
    int i = 0;
    printf("请输入整数:");
    scanf("%d",&i);
    printf("整数为:%d",i);
}

运行截图:
在这里插入图片描述

基本用法

scanf()函数用于读取用户的键盘输入,当程序用到该语句时,会停下来,等待用户的输入,然后将其保存到相应的变量中。

该函数与printf()语法类似,当用到该函数时,需要在源文件头部添加头文件stdio.h.

scanf("%d",&a);

上述中,%d占位符,用法与printf()函数相同,&为取地址符,&i表示当从键盘中输入值时,会将该值放入到i这个变量中。

注意:
变量前面必须加上&(除了指针变量和数组除外),scanf()传入的不是值,而是地址,将变量i的地址指向从键盘中输入的值。

可以从键盘中输入多个变量

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

上述中“%d %d %c %f”前面两个表示整数,第三个表示字符,最后一个表示小数。如1,2,a,2.13依次放入a,b,c,d四个变量当中。

scanf()函数处理数值占位符时,会⾃动过滤空⽩字符,包括空格、制表符、换行符等。

scanf()处理用户输入的原理是,用户的输⼊先放⼊缓存,等到按下回⻋键后,按照占位符对缓存进⾏解读。

解读用户输⼊时,会从上⼀次解读遗留的第⼀个字符开始,直到读完缓存,或者遇到第⼀个不符合条件的字符为止。

 #include <stdio.h>
 int main()
 {
    int x;
    float y;
 // ⽤⼾输⼊"    -13.45e12# 0" 
    scanf("%d", &x);
    scanf("%f", &y);
   return 0;
 }

上述中,scanf()读取用户输入时,会自动忽略起首的空格。%d从负号开始,取到-13结束,因此%d读取的数据为-13。

第二次调用scanf()时,,就会从上⼀次停止解读的地方,继续往下读取。这⼀次读取会从小数点.开始,取到0.45e12结束。

scanf()的返回值

scanf()的返回值为整数,表示成功读取的变量的个数。

如果没有读取任何项,或者匹配失败,则返回0。如果在成功读取任何数据之前,发⽣了读取错误或者遇到读取到文件结尾,则返回常量EOF。

#include <stdio.h>
int main()
{
   int a = 0;
   int b = 0;
   float f = 0.0f;
   int r = scanf("%d %d %f", &a, &b, &f);
   printf("a=%d b=%d f=%f\n", a, b, f);
   printf("r = %d\n", r);
   return 0;
}

输出结果:
在这里插入图片描述
如果输⼊2个数后,按ctrl+z ,提前结束输入:
在这里插入图片描述
在vs环境中,按三次ctrl+z会结束输入,此时r为2,表示正确读取两个数值。
如果⼀个数字都不输入,直接按3次ctrl+z ,输出的r是-1,也就是EOF。
在这里插入图片描述

占位符

常用占位符:
%d:整数
%c:字符
%s:字符串
%f:float类型的浮点数
%lf:double类型的浮点数
%Lf:long double类型的浮点数
上述占位符中,除了%c外,都可以忽略起首的空格,%c不忽略空白字符,总是返回当前第一个字符。

占位符%s,它的规则是,从当前第⼀个非空白字符开始读起,直到遇到空白字符(即空格、换行符、制表符等)为止。

  • 20
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值