前言
今天重新温习了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()这两种情况。解决这个问题,我们有以下三个方法。
- 用*抑制符拒绝接收,如%*c,
- 在%c前加空格,如sacnf(“ %c”,&a)
- 在%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)
总结
上面就是我总结出来的要注意的知识点,如果有朋友觉得还有的话欢迎补充。