输入输出
1.1按字符输入输出
getchar
#include <stdio.h>
int getchar(void);
功能:向终端输入一个字符
参数:无
返回值:终端输入的字符的ASCII码值
(需与输出函数配合使用,不会自己输出可通过此特性充当垃圾字符回收)
putchar
#include <stdio.h>
int putchar(int c);
功能:终端输出一个字符
参数:字符的ASCII码值
返回值:字符的ASCII码值(输出值与返回值不同,返回值为在终端内部的存在形式,具体输出为返回值在ASCII表中对应的字符)
putchar没有换行的效果,需要额外添加
int res=getchar();
putchar(res);
int num=putchar('\n');//putchar(10);(为换行)
// printf("%d\n",num);
1.2按格式输入输出
printf
#include <stdio.h>
int printf(const char *format, ...);//同时输出多个
功能:按指定的格式向终端输出
参数:多个
返回值:正确输出字符个数
格式:
%d int
%c char
%f float
%lf double
%s 字符串
%p 指针
%o 八进制 %#o //%o为直接输出八进制,%#o输出带格式的八进制
%x 十六进制 %#x //同上,%x输出123,%#x输出0x123
scanf
#include <stdio.h>
int scanf(const char *format, ...);//不能加\n!!
功能:按指定的格式向终端输入 (输入完毕时以回车结束)//一次只能输入一个字符
参数:多个
返回值:正确输入的字符个数
第一个字符输入格式错误,直接返回0
scanf格式必须和终端输入格式一一对应,不能加'\n'
变量名前边加&(取地址符),表示取变量的地址
int a=0;
scanf("%d",&a);
printf("a:%d\n",a);
=====================
int a=0,b=0;
scanf("%d %d",&a,&b);
printf("a:%d b:%d\n",a,b);
垃圾字符回收
2.1 通过空格回收
可以回收一个或多个空格 tab 回车
char a=0,b=0;
scanf("%c %c",&a,&b);//两个%c之间加个空格,可以把输入的两个字符之间的空格给回收了,不然空格也会被当成字符赋予
printf("a:%c b:%c",a,b)V
2.2 %*c *抑制符 (了解)
可以回收任意一个字符//用法类似上文,将空格换为%*c即可
2.3 getchar
scanf输入结束时,会在终端输入'\n';
解决'\n'对程序造成的影响:
while(1)
{
char a=0,b=0;
scanf("%c %c",&a,&b);
printf("%c %C",a,b);
getchar();//若无,上面输入结束时用作确定的回车会被当做下一个代码的输入
char c=0,d=0;
scanf("%c %c",&c,&d);
printf("%c %C",c,d);
}
分支语句
顺序结构:
分支结构:
循环结构:
if
基本结构:
if(常量值或表达式)
{
//代码块;
}
=====================
int age=10;
if(age>18)
{
printf("work\n");
}
========================
if(常量值或表达式)
{
//代码块1;
}
else
{
//代码块2;
}
===========================
int age=10;
if(age>18)
{
printf("work\n");
}
else
{
printf("study\n");
}
===========================
多层结构 else if()可以有多个
if(表达式1)
{
代码段1;
}
else if(表达式2)
{
}
else
{
}
===========================
嵌套结构
if(表达式1)
{
if(表达式2)
{
}
}
注意:
- if后边可以没有else, else前边必须有if//非同行的后面
- 分支语句代码块只有一句时,可以省略{ }
switch
switch(常量值或表达式)
{
case 常量值1:
代码块1;
break;
case 常量值2:
代码块2;
break;
default:
代码块n;
break;
}
============================
int a=4;
switch (a)
{
case 1:
printf("aaaa\n");
break;
case 4:
printf("bbb\n");
break;
case 5:
printf("ccc\n");
break;
default:
break;
}
注意:
- case后边的常量值是整型或字符型,不能是浮点型或字符串
- case分支遇到break结束; 后边可以没有break,会从符合条件的分支开始一直运行到整个switch语句执行完才结束,即后续分支不需要符合条件直接运行
练习
scanf("%d-%d-%d",&y,&m,&d);
#include<stdio.h>
char a=0,b=0;
int main()
{
printf("请输入年月日");
int y=0,m=0,d=0,n=0;
scanf("%d-%d-%d",&y,&m,&d);
getchar();
if (y>=1)
{
if ((m==1||m==3||m==5||m==7||m==8||m==10||m==12)&&(d>31||d<1))
{
printf("输入错误\n");
}
else if (m==2&&d>28||d<1)
{
printf("输入错误\n");
}
else if ((m==4||m==6||m==9||m==11)&&(d>30||d<1))
{
printf("输入错误\n");
}
else
{
switch(m)
{
case 1:n=d;
break;
case 2:n=d+31;
break;
case 3:n=d+60;
break;
case 4:n=d+91;
break;
case 5:n=d+121;
break;
case 6:n=d+152;
break;
case 7:n=d+182;
break;
case 8:n=d+213;
break;
case 9:n=d+244;
break;
case 10:n=d+274;
break;
case 11:n=d+305;
break;
case 12:n=d+335;
break;
}
if (y%4!=0&&m>=3)
{
printf("%d\n",n-1);
}
else
{
printf("%d\n",n);
}
if (y%4!=0&&m==2&&d==29)
{
printf("%d\n",n-1);
}
}
}
return 0;
}