求教c语言中switch 语句的详细用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求教c语言中switch 语句的详细用法相关的知识,希望对你有一定的参考价值。

求大神指点

switch 是一个开关语句,和case配套使用, 和if else 判断语句差不多, switch 语句是用于多分支语句进行条件判断,比如:

i++;
switch (i)

case 1 : P1 = 0xFE; //i =1; 执行P1 = 0XFE;
breK; //执行完成后跳出
case 2 : P1 = 0xFD; //i =2; 执行P1 = 0XFD;
break;
case 3 : P1 = 0xFB; //i =3; 执行P1 = 0XFB;
break;
case 4 : P1 = 0xF7 //i =4; 执行P1 = 0X7E;
break;
..........................................................................

default: break; //如果i 不符合以上条件直接跳出不执行任何东西


建议你还是先把C语言看熟把,书上都写的很清楚。
参考技术A C语言程序语句switch:
  switch用在编程中,如C语言中它经常跟case一起使用,是一个判断选择代码。其功能就是控制业务流程流转的。
  switch语句的语法如下(switch,case和default是关键字):
  switch ( controllingExpression )
  
  case constantExpression1 :
  case constantExpression2 :
  case constantExpression3 :
  statements; //当满足constantExpression1、constantExpression2、constantExpression3任何一个都执行statements
  break;
  case constantExpression :
  statements ;
  break;
  ...
  default :
  statements ;
  break;
  
  遵守switch语句规则
  switch语句非常有用,但在使用时必须谨慎。所写的任何switch语句都必须遵循以下规则:
  只能针对基本数据类型使用switch,这些类型包括int、char等。对于其他类型,则必须使用if语句。
  case标签必须是常量表达式(constantExpression),如42或者"42"。如果需要在运行时计算case标签的值,必须使用if语句。
  case标签必须是惟一性的表达式;也就是说,不允许两个case具有相同的值。
  C语言switch应用例子:
  例一:
  #include<stdio.h>
  int main()
  
  double score;
  printf("请输入分数:\n");
  scanf("%lf",&score);
  switch((int)(score/10)) //如果写成witch((int)score/10)会出现严重错误
  
  case 10:
  case 9:printf("A(最好)\n");break;
  case 8:printf("B(优秀)\n");break;
  case 7:printf("C(良好)\n");break;
  case 6:printf("D(及格)\n");break;
  case 5:
  case 4:
  case 3:
  case 2:
  case 1:
  case 0:printf("E(不及格)\n");break;
  default:printf("Error!\n");
  
  
  例二:
  #include<stdio.h>
  int main()
  
  char rank;
  printf("请输入分数等级:(A、B、C、D、E)\n");
  scanf("%c",&rank);
  switch(rank)//switch((int)score/10)出现严重错误,switch(((int)score)/10)出现严重错误,
  
  case 'A':printf("A(90~100)\n");break;
  case 'B':printf("B(80~89)\n");break;
  case 'C':printf("C(70~79)\n");break;
  case 'D':printf("D(60~69)\n");break;
  case 'E':printf("E(0~59)\n");break;
  default:printf("error!\n");break;
  
  
  例三:
  输入年月日,判断这一天是这一年的第几天。
  #include<stdio.h>
  int main()
  
  int year,month,date,leap,days=0;
  scanf("%4d%2d%2d",&year,&month,&date);
  leap=(year%4==0&&year%100!=0||year%400==0);
  switch(month)
  
  case 12:days+=30;
  case 11:days+=31;
  case 10:days+=30;
  case 9:days+=31;
  case 8:days+=31;
  case 7:days+=30;
  case 6:days+=31;
  case 5:days+=30;
  case 4:days+=31;
  case 3:days+=28+leap;
  case 2:days+=31;
  case 1:days+=date;break;
  
  printf("%4d年%2d月%2d日是这一年的第%d天。\n",year,month,date,days);
  
希望对你有帮助。
参考技术B 这个是多分支时用到的
如果问题是有多个互拆的条件时,那么用这个最好
和多个if-else if--else实现的功能相同
如输出学生成绩的abcde分段,90-100为a,80-89为b,以此类推

注意的地方
1、条件必须互拆
2、case空格 符合的条件 冒号 处理 break
如 case 1: add();break;
如果不用break,那么会执行下面的case项
3、有default项,是都没有case处理的时候的,可以没有
参考技术C switch(a)

case 1:
break;
case 2:
break;
case 3:
break;
default:

不断判断是否符合各个case的值,如果符合,就执行后面的语句
参考技术D switch(a)

case 1:

break;

case 2:

break;

case 3:

break;

default:

求教c语言中fgets的用法

while((*fgets(buffer, 100, stdin) != '\n') && (i < 100))

ps[i] = (char *)malloc(strlen(buffer) + 1):
strcpy(ps[i++], buffer);

这段程序中while是在读入一行字符串后执行括号里面的语句吗?为什么这段代码能够在输入一个空行(\n)后结束?fgets在读入第一行字符串后会读入\n\0吧,这时循环应该结束了啊,为什么还会读入整段字符串?
请回答我的那几个问题,谢谢大家。

从流中读一行或指定个字符,原型是char*fgets(char*s,intn,FILE*stream);从流中读取n-1个字符,除非读完一行,参数s是来接收字符串,如果成功则返回s的指针,否则返回NULL。

*string结果数据的首地址;n-1:一次读入数据块的长度,其默认值为1k,即1024;stream文件指针fgets的返回值是个指针,*fgets(buffer,100,stdin)就是取返回指针所指向地址的第一个字符,fgets的返回值是char*.要是输入一串字符,返回的第一字符一定不是\\n如果要是一个空行,第一个一定是\\n,所以会推出循环,如果while中的两个条件都满足,就会进入循环继续计算。

扩展资料:

一、函数原型是:char *fgets(char *s, int n, FILE *stream);

从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋'\\0'),如果文件中的该行,不足bufsize-1个字符,则读完该行就结束。

如若该行(包括最后一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。

函数成功将返回buf,失败或读到文件结尾返回NULL。因此我们不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。

二、与gets相比使用这个好处是:读取指定大小的数据,避免gets函数从stdin接收字符串而不检查它所复制的缓存的容积导致的缓存溢出问题。

三、功能:

1、《UNIX 环境高级编程》中指出,每次调用fgets函数会造成标准输出设备自动刷清!案例详见《UNIX环境高级编程(第二版)》中程序清单1-5和课后习题5.7,习题5.7的答案中给出了相关的论述。

2、初入门者,大多数是在WINDOWS下,使用VS进行练习的。此环境下,对注意1中的情况进行测试,并不能看到案例中所描述的情景,因为具体的实现不同。

stream文件流指针体指向文件内容地址的偏移原则

例:

如果一个文件的当前位置的文本如下

Love, I Have

Since you can do it.

如果用fgets(str1,6,file1);去读取

则执行后str1 = "Love," ,读取了6-1=5个字符

这个时候再执行fgets(str1,20,file1)则执行后str1 = " I Have\\n"

而如果

fgets(str1,23,file1);

则执行str1="Love ,I Have",读取了一行(包括行尾的'\\n',并自动加上字符串结束符'\\0'),当前文件位置移至下一行,虽然23大于当前行上字符总和,可是不会继续到下一行。而下一次调用fgets()继续读取的时候是从下一行开始读。

参考资料:百度百科-fgets

参考技术A

从流中读一行或指定个字符,原型是char*fgets(char*s,intn,FILE*stream);从流中读取n-1个字符,除非读完一行,参数s是来接收字符串,如果成功则返回s的指针,否则返回NULL。

形参注释:*string结果数据的首地址;n-1:一次读入数据块的长度,其默认值为1k,即1024;stream文件指针

fgets的返回值是个指针,*fgets(buffer,100,stdin)就是取返回指针所指向地址的第一个字符,fgets的返回值是char*.要是输入一串字符,返回的第一字符一定不是\\n如果要是一个空行,第一个一定是\\n,所以会推出循环,如果while中的两个条件都满足,就会进入循环继续计算。

扩展资料:

从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋'\\0'),如果文件中的该行,不足bufsize-1个字符,则读完该行就结束。

如若该行(包括最后一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。

函数成功将返回buf,失败或读到文件结尾返回NULL。因此我们不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。

函数原型

char *fgets(char *buf, int bufsize, FILE *stream);

参数

*buf: 字符型指针,指向用来存储所得数据的地址。

bufsize: 整型数据,指明存储数据的大小。

*stream: 文件结构体指针,将要读取的文件流。

返回值

    成功,则返回第一个参数buf;

    在读字符时遇到end-of-file,则eof指示器被设置,如果还没读入任何字符就遇到这种情况,则buf保持原来的内容,返回NULL;

    如果发生读入错误,error指示器被设置,返回NULL,buf的值可能被改变。

参考资料:百度百科——c语言fgets用法

参考技术B 从流中读一行或指定个字符,
原型是char *fgets(char *s, int n, FILE *stream);
从流中读取n-1个字符,除非读完一行,参数s是来接收字符串,如果成功则返回s的指针,否则返回NULL。
形参注释:*string结果数据的首地址;n-1:一次读入数据块的长度,其默认值为1k,即1024;stream文件指针

fgets的返回值是个指针,*fgets(buffer, 100, stdin)就是取返回指针所指向地址的第一个字符,fgets的返回值是char *.要是输入一串字符,返回的第一字符一定不是\n如果要是一个空行,第一个一定是\n,所以会推出循环,如果while中的两个条件都满足,就会进入循环继续计算本回答被提问者和网友采纳
参考技术C 写数据你用fprintf(fp,"格式描述符",要写的变量的地址);
fp是你的文件的指针
FILE *fp;
读的话用fscanf(fp,"格式描述符",要写的变量的地址);
其他的还有fputs();fgets();
fgets();是用来读字符串的
fputs()是用来写字符串的
用法是fgets(字符串地址,大小,fp)
fputs(字符串地址,大小,fp)
例如
char s[10];
FILE *fp;
fgets(s,8,fi);
从文件中读出的8个字符到数组s中
你在用
printf("%s",s);
输出就行了
还有好多,就先介绍到这里把
参考技术D 首先fgets函数是以指定的文件作为读的对象的,和gets功能类似。
回答:
①:while是条件,如果后面的那句成立,则向下执行,否则循环结束;
②:和第一个问题一样(注条件是!= '\n')是循环,否则结束,所以当读入的字符为'\n'循环结束;
③:这个读入的时候必需得有 '\n'这个符号是才停止循环,你按回车换行它是读不出来的。。。。

以上是关于求教c语言中switch 语句的详细用法的主要内容,如果未能解决你的问题,请参考以下文章

c语言 switch的用法

c语言中switch怎么用?

c语言中while 、for、switch、case的用法?

c语言switch语句中break的用法

C语言中switch语句用法(做题)!谢谢!

c语言中r+的详细用法用法