C语言输入输出


前言

        今天重新温习了C语言的输入输出方面的知识,得到了新的体会,所以在这跟大家分析下,有不对的地方请指出。


1. 标准输入输出函数

           getchar():读入一个字符

           putchar():输出一个字符

           gets():读入一个字符串

           puts():输出一个字符串


2. 格式化输入输出


2.1 相关函数      

        printf():格式化输出

        scanf():格式化输入

2.2 格式

        格式:%[附加格式说明符]格式字符,其中%和格式字符是必须的,附加格式说明符看情况。

2.3 相关函数 

        %d:输出4个字节有符号整数

        %u:输出4个字节无符号整数

        %o:八进制输出

        %x:十六进制输出

        %c:输出一个字符

        %f:输出浮点数

        %e:科学计数发输出

        %%:输出%号

        %s:输出字符串

        注:没有输出二进制控制符

 2.4 附加格式说明符

        #:用于输出八进制和十六进制的前导符

        l:用于输出long类型和double类型时使用

        m:把数据输出的宽度设为m

  • 输出数据长度大于设定宽度时,默认向左补空格
  • -:输出数据长度大于设定宽度时,向右补空格
  • 0m:输出数据长度大于设定宽度时,向左补0

.n:浮点型数据输出时保留小数点后n位,并且四舍五入

h:用于输入short类型数据 

+:如果是一个正数,在数据前面添加+号

问:怎样输出整型数组?

答:%s,如下 

#include <stdio.h>
 
int main(int argc, const char *argv[])
{
	int arr[10] = {'a','b','c',43,42,41};
	printf("%ls\n",arr);
	return 0;
}

结果

 

 

3.垃圾字符处理

        垃圾字符通常指的是空格换行,有时候我们明明不需要,它却读进来了。这种问题一般出现在输入字符时出现,如scanf(“%c”,&a)和getchar()这两种情况。解决这个问题,我们有以下三个方法。

  1. 用*抑制符拒绝接收,如%*c,
  2. 在%c前加空格,如sacnf(“ %c”,&a)
  3. 在%c或getchart()前加getchar()函数接收垃圾字符

下面是两种不同场合的多种垃圾字符处理方法用例。

#include <stdio.h>

int main(int argc, const char *argv[])
{
	int id;
	char sex;
	char name[32];
	char port;
#if 0 //场合1
	printf("请输入学号、性别、姓名、是否喜欢运动:\n");
	//方法1:用抑制符*拒绝接收
	//scanf("%d%*c%c%*c%s%*c%c",&id,&sex,name,&port);
	//方法2:在前面加空格
	scanf("%d %c %s %c",&id,&sex,name,&port);

	printf("id:%d,学号:%c,姓名:%s,是否喜欢运动:%c\n",id,sex,name,port);
#endif
#if 1 //场合2
	//说明:在以下情况中,最容易受垃圾字符影响的是%c,因为%d,%s不接收垃圾字符
	//方法1:用抑制符*拒绝接收
	//方法2:在%c前面加空格
	//方法3:在%c前加getchar()函数接收垃圾字符(下面用的是方法3)
	printf("请输入学号:");
	scanf("%d",&id);
	
	getchar();
	printf("请输入性别:");
	scanf("%c",&sex);

	printf("请输入姓名:");
	scanf("%s",name);
	
	getchar();
	printf("请输入是否喜欢运动:");
	scanf("%c",&port);
	printf("id:%d,学号:%c,姓名:%s,是否喜欢运动:%c\n",id,sex,name,port);
#endif
	return 0;
}

4.问答

        问:我想格式化输入一个带空格的字符串在怎么输入

        答:用%[^\n],如,printf("str = %s\n",ch)



总结

        上面就是我总结出来的要注意的知识点,如果有朋友觉得还有的话欢迎补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值