C语言关于SWITCH语句的跳转问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言关于SWITCH语句的跳转问题相关的知识,希望对你有一定的参考价值。

如图所示,每次输入后就算输入正确标签也会跳转至default上。而且输入收入时需要输入多次才能够做出响应,这是为什么?
#include<stdio.h>
int main()

char ch;
int i;
float tax;
int base;
printf("PLEASE ENTER YOUR STATUS\n");
while((ch=getchar())!='#')

switch(ch)

case'S':
base=17850;
printf("Please enter the '#'to end the loop\n");
break;
case'H':
base=23900;
printf("Please enter the '#'to end the loop\n");
break;
case'M':
base=29750;
printf("Please enter the'#' to end the loop\n");
break;
case'D':
base=14875;
printf("Please enter the '#' to end the loop\n");
break;
default:
printf("this is the wrong letter,you should enter the SHMD!");
break;


printf("NEXT PLEASE ENTER YOUR INCOME(q to quit!)\n");
scanf("%d",&i);
while(scanf("%d",&i)==1)

tax=0.15*base+0.28*(i-base);
scanf("%d",&i);
printf("the tax is %.2f",tax);


printf("Done!");
return 0;

因为你用getchar()来从缓冲区取得用户输入,getchar()函数是在用户按下回车键时从输入缓冲区取一个字符,而且用户按下的回车键也会进入到输入缓冲区!
所以当你输入‘H’按下回车时,while循环执行两次,第一次读到‘H’,正常运行,第二次读到一个回车符,执行default的代码。

在while循环中的 switch(ch) 上面加一句 fflush(stdin); 就正常了。

依据个人经验调试分析,纯手打,望采纳。
参考技术A

稍微给你改一下:

#include<stdio.h>
#include <conio.h> /* for getch() */
int main()

    char ch;
    int i;
    float tax;
    int base;
    printf("PLEASE ENTER YOUR STATUS\\n");
    while((ch=getch())!='#') /*这里改了*/
    
    switch(ch)
    
    case'S':
        base=17850;
         /*printf前面加了\\n,下同*/
         printf("\\nPlease enter the '#'to end the loop\\n");
         break;
    case'H':
        base=23900;
         printf("\\nPlease enter the '#'to end the loop\\n");
         break;
    case'M':
        base=29750;
         printf("\\nPlease enter the'#' to end the loop\\n");
         break;
    case'D':
        base=14875;
         printf("\\nPlease enter the '#' to end the loop\\n");
         break;
    default:
       printf("this is the wrong letter,you should enter the SHMD!");
       break;
    
    
    printf("NEXT PLEASE ENTER YOUR INCOME(q to quit!)\\n");
    /*这里也改了*/
    /*scanf("%d",&i); 这一句删了*/
    while(scanf("%d",&i)==1)
    
        tax=0.15*base+0.28*(i-base);
        /*scanf("%d",&i); 这一句也删了*/
        printf("the tax is %.2f",tax);

    
        printf("Done!");
     return 0;
    

参考技术B 你以为你print语句里面的\n也算回车,程序认为你连续输入了print里面的字符串,所以进入default了

00016_跳转语句break

1、跳转语句的概念

    跳转语句用于实现循环执行过程中程序流程的跳转,在Java中的跳转语句有break语句和continue语句

2、break语句

  (1)在switch条件语句和循环语句中都可以使用break语句

  (2)当它出现在switch条件语句中时,作用是终止某个case并跳出switch结构

  (3)当它出现在循环语句中,作用是跳出循环语句,执行后面的代码

3、当变量x的值为3时,使用break语句跳出循环

 1 public class BreakDemo {
 2     public static void main(String[] args) {
 3         int x = 1; // 定义变量x,初始值为1
 4         while (x <= 4) { // 循环条件
 5             System.out.println("x = " + x); // 条件成立,打印x的值
 6             if (x == 3) {
 7                 break;
 8             }
 9             x++; // x进行自增
10         }
11     }
12 }

  在上述带代码中,通过while循环打印x的值,当x的值为3时使用break语句跳出循环。因此打印结果中并没有出现“x=4”

4、标记

  当break语句出现在嵌套循环中的内层循环时,它只能跳出内层循环,如果想使用break语句跳出外层循环则需要对外层循环添加标记

 1 public class BreakDemo02 {
 2     public static void main(String[] args) {
 3         int i, j; // 定义两个循环变量
 4            a: for (i = 1; i <= 9; i++) { // 外层循环
 5             for (j = 1; j <= i; j++) { // 内层循环
 6                 if (i > 4) { // 判断i的值是否大于4
 7                     break itcast; // 跳出外层循环
 8                 }
 9                 System.out.print("*"); // 打印*
10             }
11             System.out.print("\n"); // 换行
12         }
13     }
14 }

 

以上是关于C语言关于SWITCH语句的跳转问题的主要内容,如果未能解决你的问题,请参考以下文章

C/C++中的跳转语句:breakcontinuegoto

C/C++中的跳转语句:breakcontinuegoto

c#网页之间的跳转语句

关于C语言switch语句问题

switch语句用法规则

通过goto语句学习if...elseswitch语句并简单优化