C语言基础3——输入输出

输入输出

函数三要素:功能、参数、返回值

1 按字符输入输出

1.1 按字符输putchar()

1.1.1 介绍

int putchar(int c);

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

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

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

1.1.2 用法

1.2 按字符输入getchar()

1.2.1 介绍

int getchar(void);

功能:读取终端用户输入的一个字符

参数:无

返回值:输入字符的ASCII值。如果达到文件末尾或者发生错误,则返回EOF

1.2.2用法

int c ;

c = getchar(); //用变量c去接收getchar函数的返回值,函数调用完之后,c里面就是输入字符的ASCII值了。

putchar(c); //打印输入的这个字符

但是如果调用两次getchar(),用户按键的回车会被第二次调用的getchar()接收到

int c;

c = getchar();

// getchar(); //可以把输入的回车给吃掉

putchar(c);

c = getchar();

putchar(c);

解决这个问题可以在后面加个getchar();

练习1:用getchar、putchar实现大写字母转换成小写字母(参考答案见本文最下方)

2 按格式输入输出

2.1 按格式输出printf()

2.1.1 介绍

int printf ( const char * format , ...);

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

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

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

2.1.2 格式

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

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

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

输出表:要按照格式输出的数据(可以没有,多个时以逗号分隔)

例如:

格式字符:
%d
int
%ld long
%f float
%lf double
%c char
%s 字符串
%#x 十六进制
%#o 八进制
%u 十进制无符号整数
%e 指数
%p 地址

2.2 %m.n含义

.n: 对实数,指定小数点后几位(四舍五入)
对字符串,指定实际输出位数

m: 位宽,输出数据域宽,数据长度<m,左补空格,否则按实际输出
-: 左对齐,默认右对齐
0: 输出数值时指定左边不使用的空位置自动填充0

#include<stdio.h>
int main()
{
    int a = 123;
    float b = 12.345;
    char c = 'a';
    printf("%2d,%8d,%08d,%-8d\n", a, a, a, a);
    printf("%f,%10f,%8.2f,%08.2f\n", b, b, b, b);
    printf("%c,%3c,%-10c\n", c, c, c);
    printf("%s,%10.2s,%-10s", "hello", "hello", "hello");
}

打印结果:

2.3 按格式输入 scanf()

2.3.1 介绍

int scanf ( const char * format , ...);

功能: 按格式从终端输入

参数:类似printf

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

2.3.2 格式

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

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

格式字符如同printf

int a , b ;

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

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

注意:使用scanf时""中不要写提示语句,不然输入的时候需要按原样输入才能输入成功。

2.3.3 输入分隔符的指定

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

其他字符作为分隔符:格式串中两个格式符间字符

【例】输入12 34或者12回车34

#include <stdio.h>

int main(int argc, char const *argv[])
{
    int a, b;
    scanf("%d%d", &a, &b);
    printf("%d %d\n", a, b);
    
    return 0;
}

例如中间用逗号隔开: 输入12,34才能成功输入

#include <stdio.h>

int main(int argc, char const *argv[])
{
    int a, b;
    scanf("%d,%d", &a, &b);
    printf("%d %d\n", a, b);
    
    return 0;
}

练习2:一个水分子的质量约为3.0*10^-23g,1夸脱水大约有950g,

编写一个程序,要求输入水的夸脱数,然后显示这么多水中包含多少水分子。(答案见本文最下方)

注意:scanf函数输入回车问题: 多次输入字符,回车会被下次的%c接收到。其他格式不会出现这种问题。

(1)连续输入两个char类型:

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

第二次会读到回车

(2)先输入int类型再输入char类型:

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

第二次会读到回车

(3)连续输入两个int类型

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

因为第二次是int类型不会存在读到上次回车问题

综上:只要第二次像输入char类型就会产生垃圾字符问题。

2.4 回收垃圾字符

2.4.1 getchar()

只能回收任意一个字符,一般可以用于循环里面

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

2.4.2 %*c

只能回收任意一个字符

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

2.4.3 可以通过空格回收

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

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


 

天才预设的上一篇跳转路径:C语言基础2——运算符和表达式-CSDN博客

天才预设的下一篇跳转路径:C语言基础4——控制语句1(分支)-CSDN博客

练习答案

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

#include <stdio.h>

int main(int argc, char const *argv[])
{
    int a = getchar();
    putchar(a + 32);
    putchar(10);

    return 0;
}

练习2:一个水分子的质量约为3.0*10^-23g,1夸脱水大约有950g,

编写一个程序,要求输入水的夸脱数,然后显示这么多水中包含多少水分子。(答案见本文最下方)

#include <stdio.h>

int main(int argc, char const *argv[])
{
    int num;
    scanf("%d", &num);
    printf("%e\n", num * 950 / 3.0e-23);
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值