C08-分支语句Switch

博客围绕C语言展开,介绍了scanf与scanf_s,指出scanf不安全,scanf_s多一个限定输入缓冲区大小的参数;还提及sscanf,其输入为已准备好的字符串。此外,讲解了if和switch两种分支语句,if通过判断条件决定分支,switch里只能是char与int类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于scanf与scanf_s

为什么scanf不安全

int main()
{
char * pszPassWord = "123456";
  char arry[10] = {};
  int nCount = 0;
  scanf("%s", arry);
  int IsKey = strcmp(pszPassWord, arry);
  if (IsKey == 0)
  {
   printf("密码正确\r\n");
  }
  else
  {
   printf("密码不正确\r\n");
  }
  
  return 0;
}

以上代码如果用户输入过长就会产生中断
我们可以限制用户输入

scanf("%9s",arry);

ccc烫烫 是堆栈没有初始化

但是以上的操作不是语法级别的 就是不是必要的操作
所以为了安全发明了scanf_s

scanf_s

他与scanf的最大区别在于scanf_s多了一个参数
这个参数是限定用户输入的缓冲区的大小。
如果实际输入超过限定就会,丢弃多余的数据

scanf_s("%s", arry, 10);

scanf中%c和%d的区别
scanf是一个格式化输入的函数,到底是什么意思呢?其实是数据化的格式化
%C将输入的数据转化为char类型输入
先从printf了解 格式化转化:

int main()
{
	
 char chValue = '5'; // 在内存中 是 cc cc cc 35
 printf("%d\r\n", chValue); //将内存中35 用%d表达出来是 53
 printf("%x\r\n", chValue);//十六进制表达出来 就是35
 printf("%c\r\n", chValue);//单个char字符 就是5
 return 0;
}

我们对比以下两种情况

int main()
{
 int nValue1 = 0;
 int nValue2 = 0;
 scanf("%d", &nValue1); //内存情况 00 00 00 05
 scanf("%d", &nValue2);//内存情况 00 00 00 05
 printf("%d\r\n", nValue1 + nValue2);
 return 0;
}
```c
第二种
两个5 5
```c
int main()
{
 int nValue1 = 0;
 int nValue2 = 0;
 scanf("%c", &nValue1);//按照 char类型存入 内存 就是 00 00 00 35
 scanf("%d", &nValue2);//存入 5
 printf("%d\r\n", nValue1 + nValue2); //char类型的变成 %d类型的输出 就是53 加上后面的5 结果就是为58
 return 0; 
}

以上就是nValue1转为char类型 printf将char类型转化为%d类型

fflush(stdin)

sscanf

如何输入的东西是数字 又可以判断字母
sscanf
他的输入 是已经准备好的字符串

sscanf(buff,"%d",&nValue);
buff是键盘输入,对后面格式化
已经输入的数据 buff
按照%d对于buff处理存在 nValue里面
int main()
{
 char arry[10] = {};
 int nValue = 0;
 scanf("%s", &arry);
 if (arry[0] == 'q')
 {
  printf("YSE\r\n");
 }
 else
 {
  sscanf(arry, "%d", &nValue);
  printf("%d\r\n", nValue);
 }
}

建议使用空格作为缩进,而不是tab

if语句

if是分支语句之一,它通过判断条件,决定走那条分支

if(表达式)
{
表达式为真的时候
}
else
{
表达式为假的时候
}

C语言中的表达式

表达式就是可以计算的式子 (加减乘除)
在if中为了简化

  • 非零值为真
  • 零值为假
    括号表达式
    if
    else
    括号带上

把括号最后面的为表达式

printf("%d\r\n",(10,0,5));
//结果为5

switch

switch是另外的分支结构
switch 里面只能是char 与 int
不能是double float等

基本语法

switch(int or char)
{
case 0:
    语句1;
    break;
case 2:
   语句2break... ...
defaultbreak}

如果去掉 break 就会执行完满足条件以后 会执行下面的语句
直到break出现

课堂娱乐

通过winhex,可以认识到源码和机器码的关系,内存布局的关系(字符串是在全局 区)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值