输出与输入原创
需要引入头文件
// 标准输入输出库,使用<>时编译系统将在指定目录下搜索指定文件
#include <stdio.h>
// 使用“”时首先在当前目录下搜索,若未找到相应文件,则到指定目录下搜索指定文件
// #include "stdio.h"
# 输出
# printf
调用的是stdout
库。
格式为: printf(格式控制串,输出表列);
格式控制串格式为:
%[-][m][.][n][l]格式符
,其中格式符有:d、f、s、c、u
等。点击查看
格式符说明:
%u 以十进制无符号形式输出整型数 %d 以十进制有符号形式输出整型数 %o 以八进制无符号形式输出整型数 %x 以十六进制无符号形式输出整型数 %f 以小数形式输出单、双精度实数型,默认小数保留6位 %e 以指数形式输出单、双精度实数型,默认小数保留6位,占13列宽,如10.6显示为1.060000e+001 %c 以字符形式输出一个字符,占一个字节。在ASCII码范围内与整数通用。 %s 以字符形式输出一个字符串
-
表示显示时,向左对齐。默认向右对齐。m
表示输出数据占m
个字符位,若实际数据的宽度大于m
,按实际输出;若实际数据的宽度小于m
,数据右对齐,左边会使用空格来填充。n
表示数据有n
位小数,f
默认有6位小数。l
用于常整型或双精度型数据。- 特使使用,如
%%
,则答应符号%
.
输出列表可是:
常量、变量、表达式
,使用逗号隔开。
// 打印整数
prinft("打印常量整数:%d",12);
// 打印字符串
prinft("%s","打印常量字符串");
int d = 23;//定义整型变量d,并赋值
prinft("变量d的值为:%d",&d);
// 打印多个内容
prinft("%d%s",&d,"sdasd");
// 小数打印与小数点控制
float x=1.23456;
float y=123456.789123;
// 显示为 1.23 [右对齐,必须占6个位置(包含小数点位置),不足的有空格补齐,2位小数
printf(“%6.2f”,x);
// 显示为123456.78 [超出6位,小数点前内容全部显示+2位小数点
printf(“%6.2f”,y);
// 显示为1.235 [右对齐,占5位个位置(包含小数点位置)小数点前内容全部显示+3位小数点
printf(“%.3f”,x);
print(“%4s”,“Yes”) 显示为 Yes [4位字符串
# putchar
putchar(xx); // 直接打印一个字符
putchar
不会换行输出,对应getchar
#include <stdio.h>
int main() {
char c; //未定义长度是
printf("请输入字符:");
fflush(stdout);//多个打印时,必须清除输出缓存区
c = getchar();// 第二个参数最大为9,64位8字节,实际长度+1
putchar(c);
return 0;
}
# puts
put(变量名); // 打印一行字符串,变量名只能为char数组!
//等价于 printf("%s\n",变量名);
puts
会换行输出
char c='2';
char a[3]="";
a[0] = 'c';
a[1] = 'b';
a[2] = 'a';
printf("printf的输出:%s\n",a);
puts(a);
puts(&c);
puts("a");
puts("asdsd");
对应gets()
.
# 输入
其实调用的是stdin
库。
# scanf
格式为:scanf(格式控制串,地址表列);
- 格式控制串格式为:
%[m][l][L][h][格式控制符]
,格式控制符与输出大同小异。
scanf("%d",12);
字符与其他类型同时混合输入时,想要获取单独的“%c”需要在scanf中“%c”前面加空格,否则会出现获取出错。如:
scanf(“%d %c%f”,&d,&c,&f);
往数组里输入数据,需要使用&
对数组元素取地址:
scanf(“%d”,&arr[i]);
# clion 警告
Clang-Tidy: 'scanf' used to convert a string to an integer value, but function will not report conversion errors; consider using 'strtol' instead
需要取消file->settings->editor->inspections->static Analysis Tools->Clang-Tidy
。
# 循环输入
使用while
判断条件结束条件为EOF
需要特别注意的是,
要想输入一行就打印一行
,使用sacnf
等获取输入函数
前记得使用用fflush(stdout);
清除输出缓冲区。win
系统还可以使用rewind()
同fflush()
。
fflush(stdin)
作用:清理标准输入流,把多余的未被保存的数据丢掉。成功返回0,失败返回EOF;
fflush(stdout)
:清空输出缓冲区,并把缓冲区内容输出。成功返回0,失败返回EOF;
#include <stdio.h>
int main() {
int i,j=1;
// fflush(stdout) 和 rewind(stdout) 都是清空缓冲区, rewind 只能用于 win 系统
// fflush(stdout):清空输出缓冲区,并把缓冲区内容输出。 成功返回0,失败返回EOF
// fflush(stdin):清理标准输入流,把多余的未被保存的数据丢掉。 成功返回0,失败返回EOF
while (fflush(stdin),scanf("%d", &i) !=EOF) { // EOF 值为 -1
// while (rewind(stdout),scanf("%d", &i) !=EOF) { // EOF 值为 -1
printf("输入的第%d个数为:%d\n", j,i);
j++;
};
printf("循环输入结束!\n");
return 0;
}
# 混合输入
混合类型输入时,%c
前一定要有空格,否则读取不出来!同时为了更好区分数据,数据间最好用空格隔开
#include <stdio.h>
int main() {
int i;
float j;
char c;
printf("各数据请使用空格隔开:\n");
fflush(stdout); //清空输出缓冲区,并把缓冲区内容输出。
scanf("%d%f %c",&i,&j,&c); // %c前一定要有空格,否则读取不出来
printf("混合输入结果如下:\n");
printf(" int数值为:%d\n",i);
printf(" float为:%f\n",j);
printf(" char内容为:%c\n",c);
return 0;
}
# getchar
获取输入一个字符,会将字符放到输入缓冲区,包含\n
。可以再次使用getchar()
清除缓冲区内容。
#include <stdio.h>
int main() {
char c; //未定义长度是
printf("请输入字符:");
fflush(stdout);//多个打印时,必须清除输出缓存区
c = getchar();// 第二个参数最大为9,64位8字节,实际长度+1
putchar(c);
return 0;
}
# gets
从stdin
流中获取一行,用于当输入的一行字符串
中包含有空格
时。只能用于char
型。配合 puts 使用。
64位系统,最多8个字符
32位系统,为试
char c; // 未限制长度
gets(&c);
puts(&c);
char d[20]; // 限制字符数组长度20,实际输入长度只能为19
gets(d);
puts(d);
return 0;
可与之对应的是puts()
。若是无法使用gets
,请尝试使用fgets(指针变量,指针指向的空间大小+1,stdin);
如:
#include <stdio.h>
int main() {
char c; //未定义长度是
fgets(&c,9,stdin);// 第二个参数最大为9,64位8字节,实际长度+1
puts(&c);
return 0;
}
提示
fgets()
会将\n
放到字符数组中,而gets
不会。
尽量优先使用gets
。
#include <stdio.h>
int main() {
char d[20];
// 第二个参数限定输出长度,最多只能比数组长度+1
fgets(d,21,stdin);
puts(d);
return 0;
}