C语言——输入输出

文章详细介绍了C语言中字符输入输出函数putchar()和getchar()的使用,包括它们的功能、参数和返回值。同时,讲解了格式化输入输出函数printf()和scanf()的用法,包括各种格式字符和输入分隔符的处理。还提到了输入时如何处理回车和垃圾字符的问题。
摘要由CSDN通过智能技术生成

1. 按字符输入输出

1.1 按字符输出putchar()

1.1.1 介绍

#include 
int putchar(int c);
  • 功能:向终端输出一个字符

  • 参数:c:要输出字符的ASCII值

  • 返回值:要输出字符的ASCII值。当输出错误的时候,返回EOF(end of file)文件结束符号。

1.1.2 用法

    int a=10;
    putchar('A');
    putchar(66);
    putchar('\n');
    putchar(10);
    putchar('a'-32);
    putchar('A'+32);
    putchar(a);

输出结果:

AB


Aa

1.2 按字符输入getchar()

1.2.1 介绍

#include 
int getchar(void);
  • 功能:向终端输入一个字符

  • 参数:无

  • 返回值:输入字符的ASCII值。如果发生错误返回EOF。

1.2.2 用法

例子:

    int ch = getchar();//ch里面存放的是输入字符的ascii值
    putchar(ch);

但是如果连续按字符输入输出两次,第一次输入的回车会被第二次的getchar()接收到。例子:

    int n, m;
    n = getchar();
    //getchar();
    m = getchar();
    putchar(n);
    putchar(m);

注意🚨:后面输入多余的字符会放在输入缓存区中等待输入。如果后面遇见输入功能的函数,则会完成输入。也就是我们敲的回车也会放在输入缓冲区等待输入。如果要解决可以在后面跟一个getchar()去吃掉按下的回车。

练习:用getchar、putchar实现大写字母转换成小写字母

    int a = getchar();
    putchar(a - 32);
    putchar(10);

2. 按格式输入输出

2.1 按格式输出ptrintf()

2.1.1 介绍

#include 
int printf(const char *format, ...);
  • 功能:按指定格式向终端输出

  • 参数:format:用双引号括起来的格式控制串和输出表。

  • 返回值:输出字符的个数(不常用)

2.1.2 格式

printf(“格式控制串”,输出表);

  • 格式控制串:包含两种信息。

    • 普通字符:原样输出。
    • 格式说明:修饰符%后面加格式字符,用于指定输出格式。
  • 输出表:要输出的数据(可以没用,如果多个要用","分隔)。

例子:

int a=10,b=20;
printf("a=%d b=%d\n",a,b);

格式字符:

%d int,%ld long,%f float,%lf double,%c char,%s 字符串,%x 十六进制,%o 八进制,%u 十进制无符号正数,%p 地址,%e 指数,%m.nf 含义:,m:位宽,.n:打印小数点后几位,-:左对齐,默认右对齐,0:指定左边不使用的空位自动填充0

#include 
int main()
{
   int a=123;
   float b=12.456;
   char c='a';
   printf("%2d,%8d,%08d,%-8d\n",a,a,a,a);
   printf("%f,%10f,%3.2f,%.2f\n",b,b,b,b);
   printf("%c,%3c,%-3c\n",c,c,c);
}

输出:

123,     123,00000123,123     

12.456000, 12.456000,12.46,12.46

a,  a,a

2.2 按格式输入 scanf()

2.2.1 介绍

#include 
int scanf(const char *format, ...);
  • 功能:按格式从终端输入

  • 参数:同printf

  • 返回值:正确输入数据的个数。如果当第一个数据格式不正确的时候,会直接返回0。

2.2.2 格式

scanf(“格式控制串”,地址表);

  • 地址表:变量的地址,常用取地址符&

  • 格式字符:d,o,x,u,c,s,f,e

例如:

   int a,b;
   scanf("%d%d",&a,&b);
   printf("%d %d\n",a,b);

注意🚨:用scanf时“”中不要写上除了格式控制字符以外的东西,除非输入的时候要按原样输入才可以。

拓展📢printf、sprintf、fprintf 三者区别
都是把格式好的字符串输出,只是输出的目标不一样:

1、printf,将格式字符串输出到标准输出(一般是屏幕)。
2、sprintf,将格式字符串输出到指定字符串中,所以参数比printf多一个char*。
3、fprintf, 将格式字符串输出到指定文件中,所以参数比printf多一个文件流指针FILE*。
man手册给出的函数参数👇
int printf(const char *format, …);
int fprintf(FILE *stream, const char *format, …);
int sprintf(char *str, const char *format, …);

其中将整数转换为字符串可以用sprintf 实现,如下
在这里插入图片描述

2.2.3 输入分隔符的指定

一般以空格、TAB或者回车作为分隔符

要想用其他字符作为分隔符:格式串中添加要设置的分隔字符

例如:中间用逗号分隔开:

int a, b;
scanf("%d,%d", &a, &b);
printf("%d\n%d",a,b);

练习:一个水分子的质量约为3.0*10^-23g,1夸脱水大约有950g,编写一个程序,要求输入水的夸脱数,然后显示这么多水中包含多少水分子。表示:3.0e-23 打印格式:%f或%e 。

   int num;
   scanf("%d",&num);
   printf("%e\n",num*950/3.0e-23);

注意🚨📢:

scanf函数输入回车符的问题,当用%c方式输入字符时,回车符会被下次的%c接收到。其他给格式不会出现这种问题。

例1:连续输入两个char类型数据:

char a,b;
scanf("%c",&a);
printf("%c\n",a);
scanf("%c",&b);
printf("%c\n",b);

第二个scanf会读到回车

例2:连续输入两个int类型数据:

int a,b;
scanf("%d",&a);
printf("%d\n",a);
scanf("%d",&b);
printf("%d\n",b);

因为两次输入的都是int类型,下次输入就不会读到char类型的回车。

例3:先输入一个int类型数据,再输入char类型数据:

int a;
char b;
scanf("%d",&a);
//getchar();
printf("%d\n",a);
scanf("%c",&b);
printf("%c\n",b);

第二个scanf会直接读到回车

解决🛠️:可以在后面加个getchar()吃掉回车。

2.3 垃圾字符回收

(1)通过空格回收:

可以回收一个或多个空格、回车、tab

scanf("%c",&c1);
printf("%c\n",c1);
scanf(" %c",&c2);
printf("%c\n",c2);

(2)%*c

只能回收任意一个字符

scanf("%c",&c1);
printf("%c\n",c1);
scanf("%*c%c",&c2);
printf("%c\n",c2);

(3)getchar()

只能回收任意一个字符

scanf("%c",&c1);
printf("%c\n",c1);
scanf("%*c%c",&c2);
printf("%c\n",c2);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sunqk5665

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值