运行后出现两次请点菜???

#include<stdio.h>
int main() 
{
    
    char c;
    int m,z=0;
    do{
        printf("请点菜");
        scanf("%c",&c);
        switch(c)
        {
            case 'a':
            case 'A':
                printf("鱼香肉丝\n");
                printf("点几分");
                scanf("%d",&m);
                z+=m*20;
                break;
            case 'b':
            case 'B':
                printf("宫保鸡丁\n");
                printf("点几分");
                scanf("%d",&m);
                z+=m*20;
                break;
            case 'h':
            case 'H':
                printf("宫sdad丁\n");
                printf("点几分");
                scanf("%d",&m);
                z+=m*20;
                break;    
        }if(c=='e'||c=='E')
        break;
    }while(c!='e'||c!='E');
    printf("就这些共%d钱\n",z);}

正常输入没啥问题,除非你非正常输入!

 

在输入请点菜后面清空一下输入缓冲区应该就没啥问题了。

#include<stdio.h>
int main() {

	char c;
	int m, z = 0;
	do {
		printf("请点菜");
		scanf_s("%c", &c);

		char cc;
		while ((cc = getchar()) != '\n');

		switch (c) {
			case 'a':
			case 'A':
				printf("鱼香肉丝\n");
				printf("点几分");
				scanf_s("%d", &m);
				z += m * 20;
				break;
			case 'b':
			case 'B':
				printf("宫保鸡丁\n");
				printf("点几分");
				scanf_s("%d", &m);
				z += m * 20;
				break;
			case 'h':
			case 'H':
				printf("宫sdad丁\n");
				printf("点几分");
				scanf_s("%d", &m);
				z += m * 20;
				break;
		}
		
		if (c == 'e' || c == 'E')
			break;

	} while (c != 'e' || c != 'E');
	printf("就这些共%d钱\n", z);

	return 0;
}