C语言实验报告四则运算
- 格式:doc
- 大小:128.00 KB
- 文档页数:6
C语言实验报告范文一、实验目的本实验旨在通过实际操作和编程,加深对C语言的理解和掌握,同时提高解决实际问题的能力。
二、实验内容1.利用C语言设计一个简单的计算器程序,实现简单的四则运算功能。
2.利用C语言设计一个简单的学生信息管理系统,实现添加、删除、修改和查询学生信息的功能。
三、实验步骤和代码实现1.计算器程序的设计与实现(1) 定义一个函数addition,传入两个参数,实现两数相加。
(2) 定义一个函数subtraction,传入两个参数,实现两数相减。
(3) 定义一个函数multiplication,传入两个参数,实现两数相乘。
(4) 定义一个函数division,传入两个参数,实现两数相除。
(5)在主函数中,通过用户的输入选择所需进行的运算,并输出结果。
代码如下:```C#include <stdio.h>float addition(float a, float b)return a + b;float subtraction(float a, float b)return a - b;float multiplication(float a, float b)return a * b;float division(float a, float b)if (b == 0)printf("Divisor cannot be zero!\n");return 0;}return a / b;int maiint choice;float num1, num2;printf("Please enter two numbers: ");scanf("%f%f", &num1, &num2);printf("Please choose the operation (1:addition, 2:subtraction, 3:multiplication, 4:division): ");scanf("%d", &choice);switch (choice)case 1:printf("The result is: %.2f\n", addition(num1, num2)); break;case 2:printf("The result is: %.2f\n", subtraction(num1, num2)); break;case 3:printf("The result is: %.2f\n", multiplication(num1, num2)); break;case 4:printf("The result is: %.2f\n", division(num1, num2)); break;default:printf("Invalid choice!\n");break;}return 0;```2.学生信息管理系统的设计与实现(1) 定义一个结构体Student,包含学生的姓名、学号、年龄等信息。
c实验报告实验报告:基于C语言的简易计算器设计一、设计目的:本实验旨在通过使用C语言进行编程,设计一个简易计算器,能够完成基本的四则运算。
二、设计要求:1. 实现加、减、乘、除四种基本运算的功能;2. 能够连续计算,并显示计算结果;3. 能够进行多层嵌套运算。
三、设计原理:1. 首先通过输入函数获取用户输入的数字和运算符;2. 然后通过switch语句判断用户选择的运算符,并执行相应的运算;3. 最后将计算结果输出。
四、设计步骤:1. 首先定义变量,包括两个操作数和一个运算符的字符型变量;2. 利用scanf函数分别获取用户输入的两个操作数和运算符,并进行赋值;3. 利用switch语句判断运算符,执行相应的运算,并将结果保存在一个结果变量中;4. 利用printf函数将计算结果输出。
五、设计代码:```c#include <stdio.h>int main() {double num1, num2, result;char operator;printf("请输入第一个操作数:");scanf("%lf", &num1);getchar(); // 清除缓冲区中的换行符printf("请输入运算符:");scanf("%c", &operator);getchar(); // 清除缓冲区中的换行符printf("请输入第二个操作数:");scanf("%lf", &num2);switch(operator) {case '+':result = num1 + num2;printf("计算结果:%lf\n", result); break;case '-':result = num1 - num2;printf("计算结果:%lf\n", result); break;case '*':result = num1 * num2;printf("计算结果:%lf\n", result);break;case '/':result = num1 / num2;printf("计算结果:%lf\n", result);break;default:printf("错误的运算符\n");break;}return 0;}```六、实验结果:运行程序后,按照提示依次输入操作数和运算符,然后程序会自动计算并显示结果。
c语⾔实现简单四则运算c语⾔实现简单四则运算⼀、项⽬开始⼆、阅读代码1、参考代码使⽤了随机函数:srand(unsigned( time(NULL)));通过调⽤随机函数,将⽣成的100以内的随机整数赋给不同的变量,⼀部分⽤于四则运算式数据的来源,⽽赋给变量c的随机数则⽤于结合switch语句控制程序跳转执⾏不同的分⽀,即不同的四则运算,如下:c = rand() % 5; //随机产⽣⼩于5的⾮负整数switch (c)case 0:case 1:...........case 5:2、使⽤while语句控制除数不为0while (b == 0){b = rand() % 1; //若b=0则重新⽣成b,直到b不为0}3、使⽤if语句判断减数与被减数的⼤⼩if (a > b) //使a<b{d = a;a = b;b = d;}if (m > n) //使m<n{d = m;m = n;n = d;}通过if判断并赋值的⼿段保证结果不出现负数4、原代码仅能⼀次性⽣成20个随机的四则运算式,⽽⽆法从键盘输⼊结果并判断答案正确与否。
三、修改代码由于原代码⽆法从键盘读⼊数据,所以对其进⾏了改进。
1、增加键盘读⼊功能scanf("%d",&x);从键盘读⼊输⼊的答案2、对答案进⾏正确与否的判断if(x == (a+b))printf("You are right!\n");elseprintf("You are wrong!\n");通过⽐较输⼊答案与运算得出的答案告知⽤户计算是否正确。
四、代码托管路劲五、个⼈总结通过阅读与修改代码,实现了⾃⼰想要的功能,同时也增强了⾃⼰的动⼿能⼒。
在这个过程中,体会到程序编写的乐趣,当然也伴随有挫败感,但是,当看到程序输出了⾃⼰想要的结果的时候,却也有⼀种由衷的成就感。
同时也认识到,程序的规则是死的,是严格定义的,只要花时间总是能掌握的,因此不必有太多的畏惧之⼼。
实验报告:长整数四则运算实验者:唐怡04120082 题目:设计一个实现任意长的整数进行加法运算的演示程序一.需求分析1.本演示程序中,长整数为任意长的带符号的长整数的输入及求加法后输出的长整数形式为每四位一组,组间用逗号隔开,输入以“回车符”为结束标志。
2.程度执行的命令包括:1)构造整数1,2)构造整数2,3)做加法运算,4)结束3.测试数据(1)0;0;应输出“0”(2)-2345,6789;-7654,3211;应输出“-1,0000,0000”(3)-9999,9999;1,0000,0000,0000;应输出“9999,0000,0001”(4)1,0001,0001;-1,0001,0001;应输出“0”(5)1,0001,0001;-1,0001,0000;应输出“1”(6)-9999,9999,9999;-9999,9999,9999;应输出“-1,9999,9999,9998”(7)1,0000,9999,9999;1;应输出“1,0001,0000,0000”。
二.概要设计为实现上述程序功能,应以有序表实现长整数的存储,为此,需要抽象数据类型:有序表1.有序表的抽象数据类型定义为:ADT Dulinklist{数据对象:D={ai|ai为带符号整数,1,2,…,n,n>=0}数据关系:R1={<ai-1,ai>|ai-1,ai属于集合D,ai-1<ai,i=2,…..,n}基本操作:InitDulinklist(&)操作结果:构造一个空的有序表LDestroyDulinklist(&)初始条件:有序表L已存在操作结果:销毁有序表LDulinklistLength(L)初始条件:有序表L已存在操作结果:返回有序表L的长度DulinklistEmpty(L)初始条件:有序表L已存在操作结果:若有序表L为空表,则返回TUER,否则返回FALSEGetElem(L,pos)初始条件:有序表L已存在操作结果:若干1〈=POS〈=LENGTH(L),则返回有序表L中第POS个数据元素。
c选择语句四则运算C语言中的选择语句可以用来实现四则运算。
下面列举了十个例子,每个例子都包含了一个不同的四则运算操作。
1. 加法运算:```int a = 10;int b = 5;int result = a + b;printf("10 + 5 = %d\n", result);```2. 减法运算:```int a = 10;int b = 5;int result = a - b;printf("10 - 5 = %d\n", result);```3. 乘法运算:```int a = 10;int result = a * b;printf("10 * 5 = %d\n", result); ```4. 除法运算:```int a = 10;int b = 5;int result = a / b;printf("10 / 5 = %d\n", result); ```5. 求余运算:```int a = 10;int b = 5;int result = a % b;printf("10 %% 5 = %d\n", result); ```6. 复合运算符(加法和赋值):```int b = 5;a += b;printf("a += b,a的值为:%d\n", a); ```7. 前置递增运算符:```int a = 10;int result = ++a;printf("++a的值为:%d\n", result); ```8. 后置递增运算符:```int a = 10;int result = a++;printf("a++的值为:%d\n", result); ```9. 条件运算符(三元运算符):```int a = 10;int result = (a > b) ? a : b;printf("较大的数为:%d\n", result);```10. 逻辑与运算符:```int a = 10;int b = 5;if (a > 0 && b > 0) {printf("a和b都大于0\n");} else {printf("a和b不都大于0\n");}```以上是十个例子,每个例子都涉及到了不同的四则运算操作,通过选择语句可以实现不同的运算结果。
深圳大学实验报告课程名称: ________ C 语言实验 ________________实验名称: 100以内的四则运算游戏 _________学 院: ___________ 信息工程学院 ______________指导教师 ______________ 张金凤 __________________报告人: 王文杰 组号:]7 ________学号 2013130073 实验地点 教学楼D506实验时间: 2014 年 4 月 16 日提交时间: ___________ 2014.5.9 ____________________课程编号 1300050027一、实验目的一、学习和掌握c语言函数的泄义与调用:二、进一步掌握随机数、选择结构、循环控制、交互式输入输出等程序设计方法:三、进一步掌握c语言中的数组左义和引用方法:四、学习和掌握根据流程图进行模块化程序设计的思想*二、实验要求产生1到4之间的随机数,决定4则运算的符号,再产生两个0到99的随机数进行运算,并记录下做的题数以及正确的数目,当做题者输入n或N时退出程序并显示出完成题数及正确率。
int num2); int五、对流程图的简要说明:#include <std io. h> #include <stdlib. h> #include Htime. h" #include <conio. h> void max_min(int a, int b); randN1N2(int rN1f int rN2 ); rand0per4(); randL/ntlOO ();addLmt100(int num1vsubLmt100(int num1fmulLmt100(int num1fdivLmt100(int num1f/*主函数的功能如下:在主函数中调用上面定义的五个函数,在屏幕上随机循环出一道 100以内的四则运算题。
昆明理工大学《计算机程序设计基础》课程综合实践型教学课题报告课题名称:100以内的整数四则运算测试程序设计组长:学号 040401067 姓名周绍平组员:学号 040401070 姓名邓磊学号 040401106 姓名刘云路学号姓名学号姓名学号姓名学号姓名学院:信自学院专业班级:自动化0421 指导教师:耿植林昆明理工大学计算中心2005 年 6月18日昆明理工大学计算中心《计算机程序设计基础》课程综合实践型教学课题报告课程名称:100以内的整数四则运算测试程序设计正文内容:一、问题描述这是一个进行数学计算的程序,且要求拥有多种功能,包括(1)选项菜单集成各功能函数模块(2)出题(每次出10道题目)(3)答题并评分(4)答错的题给出正确答案(5)显示答卷。
总体看来,大多数功能要求调用错题,所以面临的两个难题便是出题和保存答题者做错的题以便其它函数调用。
另外,由于除法的特殊性——其除数不能为0。
又因为这是一个用于100以内整数的四则运算的程序,又对除法这个特殊成员提出了新的要求——要使得到的结果为整数。
所以有必要把除法单独拿出来作为一个函数处理。
二、问题分析这是一个任务很明确的程序设计—用于100以内的整数的四则运算。
这个程序要求拥有选项菜单、出题、答题评分、显示答卷、错题再解、重复练习的功能。
既然是一个用于计算的程序那它的主要作用就是给练习者答题,并验证答题的正确与否。
当然,还要有一些附加功能,比如:把答卷显示出来,错题给出正解,错题再抽出来再做。
这个程序只要求100以内的四则运算,所以随机出现的数字只能是100以内的,并且要求其为整数。
不论是数据的输入与输出,都要求其为整数。
鉴于这个程序所要求达到的功能,我们小组决定把它分为计算、菜单、答卷、重做、正解、评价、除法七个函数模块。
对各成员的分工如下:计算、正解和菜单(周绍平)评价和除法(邓磊)答卷和重做(刘云路)主函数及各函数的连接则由小组成员共同完成。
C语言编写四则运算#include<stdio.h>//计算器#include<malloc.h>#define STACK_SIZE100 //ma* size of the stack#define STACK_INCREMENT10 //realloc sizetypedefstruct FStack//stack of int{float* base;float* top;int stacksize;}FStack;void Init(FStack* s){s->base = (float*)malloc(STACK_SIZE * sizeof(FStack));if (!s->base){printf("overflow!\n");return;}s->top = s->base;s->stacksize = STACK_SIZE;}bool isEmpty(FStack* s){if (s->top == s->base){returntrue;}else{returnfalse;}}void Push(FStack* s, float e){if (s->top - s->base >= s->stacksize){printf("stack is full!\nrealloc %d\n", STACK_INCREMENT);s->base = (float*)realloc(s->base, (s->stacksize + sizeof(FStack))); if (!s->base){printf("overflow!\n");return;}s->top = s->base + s->stacksize;s->stacksize += STACK_INCREMENT;}*(s->top) = e;(s->top)++;}float GetTop(FStack* s){if (s->top == s->base){printf("stack is empty!\n");return 0;}float e = *(s->top - 1);return e;}void Pop(FStack* s){if (s->top == s->base){printf("stack is empty!\n");return;}s->top--;}typedefstruct CStack//stack of char{char* base;char* top;int stacksize;}CStack;void Init(CStack* s){s->base = (char*)malloc(STACK_SIZE * sizeof(CStack)); if (!s->base){printf("overflow!\n");return;}s->top = s->base;s->stacksize = STACK_SIZE;}bool isEmpty(CStack* s){if (s->top == s->base){returntrue;}else{returnfalse;}}void Push(CStack* s, int e){if (s->top - s->base >= s->stacksize){printf("stack is full!\nrealloc %d\n", STACK_INCREMENT);s->base = (char*)realloc(s->base, (s->stacksize + sizeof(CStack))); if (!s->base){printf("overflow!\n");return;}s->top = s->base + s->stacksize;s->stacksize += STACK_INCREMENT;}*(s->top) = e;(s->top)++;}char GetTop(CStack* s){if (s->top == s->base){printf("stack is empty!\n");return 0;}char e = *(s->top - 1);return e;}void Pop(CStack* s){if (s->top == s->base){printf("stack is empty!\n");return;}s->top--;}bool isOper(char ch){if (ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '%') {returntrue;}else{returnfalse;}}int Priority(char ch){int p;switch(ch){case'(':p = 0;break;case'+':case'-':p = 1;break;case'*':case'/':case'%':p = 2;break;}return p;}float Calculate(float f1, float f2, char oper){float f3;switch(oper){case'+':f3 = f1 + f2;break;case'-':f3 = f1 - f2;break;case'*':f3 = f1 * f2;break;case'%':f3 = (float)((int)f1 % (int)f2);break;case'/':if (f2 == 0){printf("\nDevided by zero!");e*it(1);}else{f3 = f1 / f2;}break;}return f3;}float StrtoFloat(char* str, int* pos){float fRes;int i = *pos;int k;char n[50];for (k = 0; str[i] >= '0' && str[i] <= '9' || str[i] == '.'; i++, k++) {n[k] = str[i];}n[k] = '\0';*pos = i;fRes = atof(n);return fRes;}bool Check(char* str){int i = 0;while (str[i] != '\0'){if (str[i] != '+' && str[i] != '-' && str[i] != '*' && str[i] != '/' && str[i] != '%'&& str[i] != '.'&& str[i] != '('&& str[i] != ')'&& (str[i] < '0' || str[i] > '9')){returnfalse;}i++;}returntrue;}void main(){char e*p[100];int i;float f, f1, f2;char oper;FStackfstack;CStackcstack;Init(&fstack);Init(&cstack);printf("The e*pression is:");gets(e*p);if (!Check(e*p)){printf("input error! e*it now!\n");e*it(1);}for (i = 0; e*p[i] != '\0' && e*p[i] != -52; i++) {if (!isOper(e*p[i])){f = StrtoFloat(e*p, &i);Push(&fstack, f);}if (isOper(e*p[i])){if (!isEmpty(&cstack)){while (!isEmpty(&cstack) && Priority(e*p[i]) <= Priority(GetTop(&cstack))){oper = GetTop(&cstack);Pop(&cstack);f2 = GetTop(&fstack);Pop(&fstack);f1 = GetTop(&fstack);Pop(&fstack);f = Calculate(f1, f2, oper);Push(&fstack, f);}Push(&cstack, e*p[i]);}else{Push(&cstack, e*p[i]);}}elseif (e*p[i] == '('){Push(&cstack, e*p[i]);}elseif (e*p[i] == ')'){while (GetTop(&cstack) != '(' && !isEmpty(&cstack)) {oper = GetTop(&cstack);Pop(&cstack);f2 = GetTop(&fstack);Pop(&fstack);f1 = GetTop(&fstack);Pop(&fstack);f = Calculate(f1, f2, oper);Push(&fstack, f);}Pop(&cstack);}}while (!isEmpty(&cstack)){oper = GetTop(&cstack);Pop(&cstack);f2 = GetTop(&fstack);Pop(&fstack);f1 = GetTop(&fstack);Pop(&fstack);f = Calculate(f1, f2, oper);Push(&fstack, f);}printf("\nThe result is:%f\n", GetTop(&fstack)); Pop(&fstack);}。
《C语言》课内实验报告学生姓名:及学号:学院:班级:课程名称:C语言实验题目:实验二选择结构程序设计指导教师姓名及职称:年月日一、实验目的1.掌握逻辑表达式和if语句、嵌套的if语句、switch语句和break语句的格式、语义。
2.掌握选择结构程序设计方法。
二、实验内容编写程序实现两个数的四则运算,要求从键盘输入进行运算的两个数字以及相应的运算符('+'、'-'、'*'、'/'),程序给出算数表达式及运算结果。
(如下图所示,要求使用if语句和switch语句两种方法实现)三、实验结果1、流程图2、源程序(1)使用if语句#include <stdio.h>void main(){float a,b;char c;printf("please input two numbers:");scanf("%f%f",&a,&b);getchar();printf("\nplease input the operator:");//fflush(stdin);scanf("%c",&c);printf("\n");if(c=='+')printf("%10.2f+%10.2f=%10.2f\n",a,b,a+b);else if (c=='-')printf("%10.2f-%10.2f=%10.2f\n",a,b,a-b);else if (c=='*')printf("%10.2f*%10.2f=%10.2f\n",a,b,a*b);else if (c=='/')printf("%10.2f/%10.2f=%10.2f\n",a,b,a/b);elseprintf("Input error!\n");}(2)使用switch语句#include <stdio.h>void main(){float a,b;char c;printf("please input two numbers:");scanf("%f%f",&a,&b); //输入a,b的值getchar();printf("\nplease input the operator:"); //输入操作符scanf("%c",&c);printf("\n");switch(c) //判断输入操作符{case '+': //若操作符为'+',输出a+b printf("%10.2f+%10.2f=%10.2f\n",a,b,a+b);break;case '-': //若操作符为'-',输出a-b printf("%10.2f-%10.2f=%10.2f\n",a,b,a-b);break;case '*': //若操作符为'*',输出a*b printf("%10.2f*%10.2f=%10.2f\n",a,b,a*b);break;case '/': //若操作符为'/',输出a/b printf("%10.2f/%10.2f=%10.2f\n",a,b,a/b);break;default:printf("Input error!\n");}}2、运行结果输入12、13以及+,得到结果如下:输入12、13以及-,得到结果如下:输入12、13以及*,得到结果如下:输入12、13以及/,得到结果如下:输入12、13以及a,得到结果如下:3、结果分析题目要求编程实现两个数的四则运算,因此只需判断输入的操作符为四则运算中的哪一个,编程时可以使用if语句或者switch语句实现判断过程。
大一c语言编程四则运算在学习C语言过程中,四则运算是我们最常接触的基础知识之一。
四则运算包括加、减、乘、除四种基本运算,本文将以大一C语言编程四则运算为主题,详细介绍四则运算的实现方法和注意点。
一、加法运算加法运算是最简单的运算之一,只需要使用“+”符号即可实现。
例如,将两个整数a和b相加,可以使用以下代码实现:int a = 10;int b = 20;int c = a + b;其中,a和b为要相加的两个整数,c为保存结果的变量。
二、减法运算减法运算与加法运算类似,只需要使用“-”符号即可实现。
例如,将两个整数a和b相减,可以使用以下代码实现:int a = 20;int b = 10;int c = a - b;其中,a和b为要相减的两个整数,c为保存结果的变量。
三、乘法运算乘法运算需要使用“*”符号。
例如,将两个整数a和b相乘,可以使用以下代码实现:int a = 10;int b = 20;int c = a * b;其中,a和b为要相乘的两个整数,c为保存结果的变量。
需要注意的是,如果a和b中有一个是浮点数,那么结果也会是浮点数。
四、除法运算除法运算需要使用“/”符号。
例如,将两个整数a和b相除,可以使用以下代码实现:int a = 20;int b = 10;int c = a / b;其中,a和b为要相除的两个整数,c为保存结果的变量。
需要注意的是,如果a和b中有一个是浮点数,那么结果也会是浮点数。
此外,如果b为0,程序将会出现除0错误。
五、复合运算除了基本的四则运算外,还有一些复合运算,例如加等于和减等于运算。
例如,将变量a加上10,可以使用以下代码实现:int a = 10;a += 10;其中,a += 10等价于a = a + 10。
减等于运算同理。
六、小数运算除了整数运算外,C语言还支持小数运算。
小数运算需要使用浮点型变量,例如:float a = 1.23;float b = 4.56;float c = a + b;其中,a和b为要相加的两个浮点数,c为保存结果的变量。
《C语言》课内实验报告
学生姓名:
及学号:
学院:
班级:
课程名称:C语言
实验题目:实验二选择结构程序设计
指导教师
姓名及职称:
年月日
一、实验目的
1.掌握逻辑表达式和if语句、嵌套的if语句、switch语句和break语句的格式、语义。
2.掌握选择结构程序设计方法。
二、实验内容
编写程序实现两个数的四则运算,要求从键盘输入进行运算的两个数字以及相应的运算符('+'、'-'、'*'、'/'),程序给出算数表达式及运算结果。
(如下图所示,要求使用if语句和switch语句两种方法实现)
三、实验结果
1、流程图
2、源程序
(1)使用if语句
#include <stdio.h>
void main()
{
float a,b;
char c;
printf("please input two numbers:");
scanf("%f%f",&a,&b);
getchar();
printf("\nplease input the operator:");
//fflush(stdin);
scanf("%c",&c);
printf("\n");
if(c=='+')
printf("%10.2f+%10.2f=%10.2f\n",a,b,a+b);
else if (c=='-')
printf("%10.2f-%10.2f=%10.2f\n",a,b,a-b);
else if (c=='*')
printf("%10.2f*%10.2f=%10.2f\n",a,b,a*b);
else if (c=='/')
printf("%10.2f/%10.2f=%10.2f\n",a,b,a/b);
else
printf("Input error!\n");
}
(2)使用switch语句
#include <stdio.h>
void main()
{
float a,b;
char c;
printf("please input two numbers:");
scanf("%f%f",&a,&b); //输入a,b的值
getchar();
printf("\nplease input the operator:"); //输入操作符
scanf("%c",&c);
printf("\n");
switch(c) //判断输入操作符
{
case '+': //若操作符为'+',输出a+b printf("%10.2f+%10.2f=%10.2f\n",a,b,a+b);
break;
case '-': //若操作符为'-',输出a-b printf("%10.2f-%10.2f=%10.2f\n",a,b,a-b);
break;
case '*': //若操作符为'*',输出a*b printf("%10.2f*%10.2f=%10.2f\n",a,b,a*b);
break;
case '/': //若操作符为'/',输出a/b printf("%10.2f/%10.2f=%10.2f\n",a,b,a/b);
break;
default:
printf("Input error!\n");
}
}
2、运行结果
输入12、13以及+,得到结果如下:
输入12、13以及-,得到结果如下:
输入12、13以及*,得到结果如下:
输入12、13以及/,得到结果如下:
输入12、13以及a,得到结果如下:
3、结果分析
题目要求编程实现两个数的四则运算,因此只需判断输入的操作符为四则运算中的哪一个,编程时可以使用if语句或者switch语句实现判断过程。
另外,输入的操作符有可能非法,这时程序会输出“Input error!”。
四、思考及总结
实验过程中,连续写两个scanf函数,想分别用来输入操作数及操作符,但是在运行时并不能将操作数和操作符的输入分开。
通过上网搜索发现产生这个问题的原因是输入并不是在回车的时候结束,而是先存放在一个缓冲区中,这是输入的回车作为字符赋给操作符,这样就产生了错误。
解决的办法找到两个,一个是使用getchar()命令将回车符接收,另外一个是使用fflush(stdin)将缓冲区清空。