其他分享
首页 > 其他分享> > 嵌入式第17步——C语言分支语句嵌入式

嵌入式第17步——C语言分支语句嵌入式

作者:互联网

      计算机程序是沿着主程序段,从上向下进行运行。当程序里只有一条从上向下的运行顺序的时候,称为顺序执行。这样的程序只能沿着设定好的路径去完成一个任务。只有在适当是地方加上分支语句,让计算机对于各种可能出现的问题都能够根据当时情况去处理才是一个完善的程序。C语言里可以引入到分支的语句包括“if……else……”、“which”、“while”三种分支方式。

1、  if语句。

if判断的2种形式

1)if(表达式)

     …………..//逻辑值为真时需要执行的语句和程序块

 }

else

     …………..//逻辑值为假时需要执行的语句和程序块

 }

 

2)if(表达式1)

     …………..//表达式1逻辑值为真时需要执行的语句和程序块

 }

   elseif(表达式2)

     …………..//表达式2逻辑值为真时需要执行的语句和程序块

 }

   else

…………

 

学习过程中,我进过的坑:

坑1)传统大小写转换程序段:

我的写法: 

scanf(“%c”,&a)

if  (‘A‘<a<’Z’)//判断为小写

{

a=a-32

               }

               elseif(‘a’<a<,’z’)//判断为大写

               {

               a=a+32

               }

               else   //输入值非字母

 

     运行过程中,每次都判断为大写。后询问知道,根据判断规则‘A‘<a<’Z’会首先计算左侧的’A‘<a,造成结果为1,然后是计算1<’Z’,这样每次都是运行这一段程序,而不会去运行后面的程序。在网友建议下,判断依据改为’A‘<a&&a<’Z’和‘a’<a&&a<’z’,然后运行成功。

2、  switch语句

switch(表达式)

        case 常量表达式1:语句或程序块;break;

        case 常量表达式2:语句或程序块break;

         case3 常量表达式3:语句或程序块break;

       casen  常量表达式n:语句或程序块break;

 

default:语句或程序块break;

 

 }

 

形式上比if要简洁很多。但是缺点是case后接的常量表达式只是起语句标号作用,这里使用的计算式必须得出来是一个肯定的结果,不能出现存在溢出的可能的计算结果。否则在调试过程中会报错。

使用switch的语句必须遵循以下规则:

1、  只能针对基本数据类型中的整形类型使用switch,这些类型包括int、char、等。对于其他类型,必须使用if语句。

2、  switch()的参数类型不能为实型。

3、  case标签必须是常量表达式(constant Expression),比如42或者“42”。

4、  case标签必须是唯一性的表达式;也就是说,不允许存在两个case具有想通的值。

 

学习过程中的坑:

坑1、case后标签:

使switch匹配输入:

   输入符号时采用了:char x;

     scanf(“%c”,&x);

       case ‘+’:     //注意:这里使用单引号,双引号会有错误提示(case label does not reduce to an integer constant)因为双引号对应一个内存的整数,而不是一个单个的字符。

坑2、判断语句:

判断语句中的判断表达式不能像数学上的连续判断,必须采用&&来单独判断。

例:判断字符是否是字母。

   if(‘a’<=ch<=’z’)  //错误判断表达式,运行时,第一步为‘a’<=ch,任何非字母ch在运算后结果为0,第二步为1<=’z’,那么结果为1.造成错误判断。正确写法:

  if(‘a’<=ch&&ch<=’z’)

坑3、switch(表达式)

case 常量表达式:

 

case后接的常量表达式  不能结果为可能存在偏差,必须是一个固定的结果。比如: case i>=80&&i<=90,这个时候需要改用if判断。

坑4、在某些情况下,xshell错误关闭等,会出现一个.swp文件,当再次运行的时候会提示已经打开,询问如何操作的提示。处理方法:利用ls –al 命令查看是否出现了.swp文件,利用rm –f  文件名,删除对应的.swp文件就可以消除这个提示。

个人感觉这个swp文件,和windows下打开一个文件时会产生一个临时文件一样,如果非正常关闭,会在原有文件所在的文件夹位置尝试里一个临时文件。这个应该是程序的一种保护机制。如果运行过程中系统出现了崩溃现象,可以找回部分已经编辑的文件。

坑5、创造一个死循环,用于无限执行下去。可以使用的方法:

   for(;;)‘

  while(1)

  

坑6、读入键盘输入的字符串的方式(每次读取一个字符):

1)  while((ch=getchar())!=’\n’)

   {         }

2)  for((ch=getchar());ch!=’\n’;ch=getchar())

{           }

坑7:循环的条件里,如果有多个读入会出现一个循环多次读入,造成一些匪夷所思的结果。

       char  c;

       for(c=getchar();getchar()!=’#’;c=getchar()

        {

           putchar(c);

          }

     输入的字符为12345#

       则运行过程为

c=’1’,getchar()=’2’

           输出1

           c=’3’,getchar()=’4’

          输出3

         c=‘5’,getchar()=‘#’    程序退出。

        说明:getchar()是读取一个字符。而在初始化里,c=getchar(),这个时候读了一个字符。在条件判断内,getchar()!=‘#’,这个时候又读了一个字符。这样输入的一串字符串在一次循环过程中就被读入了两个字符。如果不想被重新读入一个,在判断位置需要用c!=‘#’ 

 

标签:语句,case,17,程序,C语言,switch,嵌入式,表达式,getchar
来源: https://www.cnblogs.com/ty-topic/p/16368151.html