04-输入输出
输入输出
1.字符输出函数
c语言中没有I/O语句,I/O操作由函数实现
#include <stdio.h
1.1 字符输出函数 - putchar
格式:putchar(c)
参数:c为字符常量\变量\表达式
功能:把字符c输出到显示器上
返回值:正常,为显示的代码值ASCII码
#include <stdio.h>
int main()
{
int a = 65;
char ch = 'B';
putchar(a); // int值 -- 显示A
putchar('\n'); // 字符 -- 显示换行
putchar(ch); // 字符 -- 显示B
return 0;
}
1.2 格式输出函数
printf("格式控制串",输出表)
功能:按照指定格式向显示器输出数据
输出表:要输出的数据
格式控制串:包含两种信息
格式说明:%[修饰符]格式字符,用于指定输出的格式
普通字符:原样输出
#include <stdio.h>
int main()
{
int a = 255;
char ch = 'C';
char s[] = 'sdfsdf';
float fl = 567.534;
printf("%d %o %x\n",a,a,a);
printf("%c %d\n",ch,ch); // %c 打印字符 %d 打印字符ascii码值
printf("%s\n",s);
printf("%f %e %g\n",fl,fl,fl);
printf("%%"); // 打印一个%
return 0;
}
1.3 附加格式说明符
m.n
int a = 1234;
float b = 123.456;
char ch = 'a';
printf("%8d,%2d\n",a,a); // 8d指的是数据位宽m ,不够左侧补空格
// 位宽 < 实际位数,原样输出
//
printf("%8f,%8.1f,%.2f\n",f,f); // .n表示保留小数
printf("%3c",ch); // 补充空格
char s[] = "Hello,World!";
printf("%15s\n",s); // 字符串打印15个字符长度,不够左侧补空格
printf("%15.5s\n",s); // 要打印15个,打印5个字符
printf("%2.5s\n",s); // 2 < 12(实际长度,原样输出),打印5个字符
printf(".5s\n",s); //
0 +
0 -- 用0填充
+ -- 整数显示加号
int a = 1234;
float b = 123.456;
char ch = 'a';
printf("%08d %0+8d\n",a); // 8d指的是数据位宽m ,不够左侧补0
// + 表示正数的时候添加加号
printf(%08.1f\n",f); //
printf("%3c",ch); // 补充空格
2.字符输入函数
2.1 字符输入函数 -- getchar()
getchar()
--格式:getchar()
--功能:从键盘读取一个字符
--返回值:正常,返回读取的ASCII码值;出错或者结束输入,返回-1(用int接收)
ctrl d返回-1,表示结束输入
#include <stdio.h>
int main()
{
int ch;
printf("input:")
ch = getchar();
putchar(ch); // 输入什么字符显示什么字符
putchar('\n');
printf("ch = %d\n",ch); // 结束键盘输入的时候显示-1
return 0;
}
2.2 格式输入函数 scanf
scanf("格式控制串,地址表")
功能:按照指定格式从键盘读入数据,存入地址表指定存储单元中,并按回车键结束
格式控制串可以表示输入的是多少进制的数
返回值:正常,返回输入数据的个数
地址表:变量的地址,常用取地址运算符&
#include <stdio.h>
int main()
{
int ch,n;
printf("Enter a character:");
n = scanf("%d",&ch); // 输入65
printf("%d\n",ch); // 打印65
printf("n = %d\n",n); // n小于输入变量的个数表示输入失败
return 0;
}
修饰符
#include <stdio.h>
int main()
{
int ch,n;
// long m;
int y,m,d
printf("Enter a character:");
n = scanf("%x %ld",&ch,&m); // 输入 21 5
// printf("n = %d\n, %d %ld",n,ch,m); //2 33 5
scanf("%4d%2d%2d",&y,&m,&d); // 20221213
// 4d 表示位宽 -- 自动将输入的前四位给y
printf("%d %d %\n",y,m,d);// 2022 12 13
return 0;
}
* -- 抑制符,输入的值不赋值给变量
scanf("%2d%*3d%2d",&a,&b); // 1234567 a = 12 b = 67 中间取到值不给变量
// 字符型变量连续输入
#include <stdio.h>
int main()
{
char y,m,d;
scanf("%c%c%c".&y,&m,&d);
printf("%d:%d:%d\n",y,m,d);
// 输入abc 打印97:98:99
// a b c 97:32:32
// 字符型变量在进行连续输入的时候,空格和转义字符是有效字符
// 数值型进行连续输入的时候空格不是有效字符
return 0;
}
总结:整型数据输入的时候,遇到空格\会出\TAB都认为是数据结束,此外,非法输入(整型输入字母)和遇到宽度也表示结束
scanf("%d%c%f",&a,&b,&c);
输入:1234a123o.26
a = 1234 b = 'a' c = 123
3.输入函数留下的"垃圾"
int a ;
char x;
printf(">");
scanf("%d",&a);
scanf("%c",&x);
printf("%d:%c:%d\n",a,x,x); // 输入5,然后回车,打印 5:回车:10
// 回车会赋值个x
// 方法1:使用getchar清除
int x;
char ch;
scanf("%d",&x);
getchar()
ch = getchar();
printf("x = %d,ch = %d\n",x,ch);
// 方法2:使用空格%c或者%*c接收字符型数据
int x;
char ch;
scanf("%d",&x);
// scanf(" %c",&ch);
scanf("%*c",ch);
printf("x = %d,ch = %d\n");
4.字符串输入输出函数
4.1 字符串输入函数-gets
gets
格式:char * gets(char *s)
功能:从键盘输入一个以回车结束的字符串放入字符数组中,并且自动加入'\0'
说明1:输入串长度应小于字符数组长度
说明2:与scanf函数不同,gets函数并不以空格作为字符串输入结束的标志
char s[5]; // 定义长度为5的字符数组用于存储字符串,只能存储4个
gets(s); // 输入字符串
printf("%s\n",s) // 打印字符串
// 用户输入字符串的长度超过字符数组的长度,会报错
// 这个函数是有风险的
char s[5];
scanf("%s",s); // 空格会作为分割符结束,可以用循环,使用%c存储空格
printf("%s\n",s);
4.2 字符串输出函数-puts
char s[5];
gets(s);
printf("s:%s",s); // printf() 默认不换行
printf("***\n");
puts("$$$$"); // 自动换行
puts(s);
puts
格式:int puts(const char *s)
功能:向显示器输出字符串(输出完,换行)
说明:字符数组必须以'\0'结束
#include <stdio.h>
#include <math.h>
int main()
{
int a,b,c;
int delt;
float result1,result2;
scanf("%d%d%d",a,b,c);
delt = b*b-4*a*c;
result1 = [(-b)+sqrt(delt)]/(2*a);
result2 = [(-b)-sqrt(delt)]/(2*a);
printf("result1 = %f,result2 = %f\n",result1,result2);
return 0;
}