输入和输出

按字符输入输出

按字符输出putchar()

格式

#include <stdio.h>
int putchar(int c);

功能:向终端输出一个字符

参数:要输出的字符的ASCII码值

返回值:

                成功,返回输出字符的ASCII码值

                失败,返回EOF(end of file)

用法

char c='b';
int a=10;
putchar(66);
putchar('A'+32);
putchar(c);
putchar(a);
putchar('\n');

以上代码输出结果为:ABab

按字符输入getchar()

格式

#include <stdio.h>
getchar(int c);

功能:从终端输入一个字符串

参数:无

返回值:

                成功,返回输入字符串的ASCII码

                到达文件末尾或失败,返回EOF

用法

int c=getchar();  //变量c里面存放了输入字符的ASCII码值
putchar(c);

以上代码输出结果:变量c输入的字符

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

#include <stdio.h>
#include <stdlib.h>
int main(int argc,char const *argv[])
{
    int c=getchar();
    putchar(c);
    int m=getchar();
    putchar(m);
    return 0;
}

注意:

        后面多余的字符会放在输入缓冲区中等待输入(即下一个putchar会输出),如果后面遇见输出功能的函数会完成输出,也就是我们敲的回车键也会放到输入缓冲区内等待输入。字符是排队等待输入的,如果要解决这个问题可以在后面跟一个getchar()。

按格式输入输出

按格式输出printf()

格式

#include <stdio.h>
int printf(const char * format,...);

功能:按照指定格式向终端输出

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

返回值:输出字符的个数

用法

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

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

  1. 普通字符:按原样输出
  2. 格式说明:修饰符%后面加格式字符,用于指定输出格式

输出表:要输出的数据,可以没有数据;当有多个数据时用 “ ,” 分隔

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

以上输出结果为:10 20

按格式输入scanf()

格式

#include <stdio.h>
int scanf(const char *  format,...);

功能:按格式从终端输入

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

返回值:

                成功,返回正确输入数据的个数

                当有第一个输入的数据格式不正确时,直接返回0

用法

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

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

  1. 普通字符:按原样输出
  2. 格式说明:修饰符%后面加格式字符,用于指定输出格式

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

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

以上输出结果:输出a和b的值

注意:

        scanf输入时要原样输入,如果用scanf时格式控制串中写了除格式控制字符以外的东西时要原样输入才行。

输入分隔符的指定 

scanf输入时,一般用空格、Tab键或者回车键作为分隔符;其他字符做分隔符时,需要在格式控制串中两个格式字符间输入。

例如:

输入 “12 34” 或者输入 “12回车34” 

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

例如:

输入 “12,34”

要输入的两个字符中间用逗号隔开,输入的时候要原样带着逗号

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

练习:

一个水分子的质量约为3.0*10^-23g,1夸脱水大概有950g,当输入水的夸脱数后,显示这些水中包含多少水分子,数据表示:3.0e-23,打印数据的格式:%f或%e

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int kua;
    scanf("%d",&kua);
    printf("%e\n",kua*950/3.0e-23);
    return 0;
}

注意:

scanf()函数输入回车符的问题:

        当用到%c输入字符串时,如果下个数据还是char类型,那么回车符会被下次的%c接收到,但是其他格式不会出现这种问题。

例如:

连续输入两个char类型的字符:

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

如果a后面用回车获取值,那么第二个scanf会读到回车。

例如:

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

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

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

 

例如:

先输入int类型的数据,再输入char类型的数据

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

第二次输入会直接读到回车

综上例子,只要第一次输入后用回车结束,第二次输入的是char类型,不处理回车的话就会接收上一次的回车然后输出。

垃圾字符回收

回收空格、回车和tab

通过空格可以回收一个或多个空格、回车和tab。

char a,b;
scanf("%c",&a);
printf("%c",a);
scanf("%c",&b);
printf("%c\n",b);
回收任意字符
%*c

用%*c能够回收任意一个字符。

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

用getchar()能够回收任意一个字符。

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

格式字符

格式字符类型格式或含义
%dint类型
%ldlong类型
%ffloat类型
%lfdouble类型
%cchar类型
%s字符串
%x十六进制数据
%o八进制数据
%e指数型数据
%p该数据的存放地址
%u十进制无符号整数
%m.nfn:打印小数点后几位        m:位宽
%-数据类型左对齐(默认是右对齐)
%0数据类型用0自动填充不适用的空位置
int a=123;
float b=12.345;
char c='a';
printf("%2d,%8d,%8d,%-8d\n",a,a,a,a);
printf("%f,%3f,%8.2f,%.2f\n",b,b,b,b);
printf("%c,%3c,%-3c\n",c,c,c);

以上输出结果为:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值