学习C语言的总结(第九周)

1.在编写程序的时候,如果是要接收一个字符或者输出一个字符,都有两种形式
第一种是使用scanf()这个函数来接收字符,还有使用printf()函数来输出字符

第二种是使用getchar()函数来接收一个字符,还有使用putchar()函数来输出一个字符。不过在使用的时候要记住,值得注意的是,我们输入的数据在打下enter键(即/n)的时候,会连同输入的数据一起,被视为一个块被放到缓冲区中,再被getchar()函数读取

两者的书写形式如下(设变量为a):
a=getchar();//这条程序使用getchar函数接收一个字符
putchar(a); //这条程序则输出了变量a的数据内容

getchar()函数在C语言中可以放在程序中,用来读取\n,使得编译运行中的程序进入等待的状态,可以放在其它函数语句后面,也可以放在return函数前面,使程序在桌面等待

2.在程序编译时,如果缓存区已有数据,则scanf()函数会从内存缓存区中读取数据;若缓存区中没有数据,便会等待用户输入数据后再进行执行下一条语句

3.分支结构语句由switch、case、default、break的语句构成形式为:
switch(判断表达式)
case 常量表达式1:语句序列;[break]
case 常量表达式2:语句序列;[break]
[default:语句序列3;]

switch语句的运行模式:
第一步:计算判断表达式的值

第二步:将第一步中的值逐步与常量表达式进行对比

第三步:1)当两个值相等的时候,执行该常量表达式后面的语句
2)当所有的常量表达式的值都与判断表达式的值不相同时,若有default语句就执行该语句;若无就跳出该switch函数

注:如果在switch函数中case语句后没有break,那当有两个值相等的时候,程序会在执行完相应的语句序列后,继续执行后面所有的语句序列

例:/计算现在已经过了今年的几天/
#include <stdio.h>
int main(void)
{
int day,month,year,sum,leap;
printf("\nplease input year,month,day\n");
scanf("%d,%d,%d",&year,&month,&day);
/输入的逗号得用英文的输入法/
switch(month)
{
case 1:sum=0;//break
case 2:sum=31;//break;
case 3:sum=59;//break;
case 4:sum=90;//break;
case 5:sum=120;//break;
case 6:sum=151;//break;
case 7:sum=181;//break;
case 8:sum=212;//break;
case 9:sum=243;//break;
case 10:sum=273;//break;
case 11:sum=304;//break;
case 12:sum=334;//break;
default:printf(“data error”);break;
}
sum=sum+day;
if(year%400==(year%4== 0&&year%100!=0))//判断是否为闰年
leap=1;
else
leap=0;
if(leap==1&&month>2)//若为闰年且月份大于2,总天数加1
sum++;
printf(“it is the %dth day”,sum);
getchar();
getchar();
return 0;
}
当用户输入1~12中的任意一个数值,程序都可以进行运算,但在程序中的break的被当成注释,并不会进行编译

故我们假设现在输入一个数值2018,7,11(注意,这里的三个数值要用英文输入法的逗号隔开,否则程序无法执行),最后输出的数值为345

这个数值是由334+11得来的,由于程序中的break语句不会被执行,所以程序在对应输入的月份数7后会执行接下来的所有语句,sum的值被不断地赋值,最后赋值完,sum的值为334

而如果break的值能被执行,那程序就会在完成第一个语句序列后跳出这个switch函数

错误的地方
若程序中有三个连续的scanf(),其中的转换字符若为%c,那么当你输入一个字符的时候,为了让程序收到你输入的字符(同时代表着输入结束)你会输入一个回车字符,这个字符会在之后的scanf函数上生效,使得程序直接跳过这个scanf函数

解决这个问题,可以在scanf函数后面加上一个getchar(),用来接收回车字符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值