小弟初学c,程序写的很烂,请大家帮忙看一个错误
-
- 帖子: 89
- 注册时间: 2009-08-18 20:35
小弟初学c,程序写的很烂,请大家帮忙看一个错误
以下是我写的一段代码,只是练习
#include <stdio.h>
char sel;
float a,b;
char getfirst();
float getfloat();
void getnum();
int main()
{
while(sel!='q')
{
printf("Please enter your option: \n");
printf("p.plus m.minus\n");
printf("t.multiply d.divide\n");
printf("q.quit\n");
sel=getfirst();
sel=tolower(sel);
if(sel=='q')
break;
switch(sel)
{
case 'p':
getnum();
printf("%f+%f=%f\n",a,b,a+b);
break;
case 'm':
getnum();
printf("%f-%f=%f\n",a,b,a-b);
break;
case 't':
getnum();
printf("%f*%f=%f\n",a,b,a*b);
break;
case 'd':
getnum();
printf("%f/%f=%f\n",a,b,a/b);
break;
default:
printf("Wrong letter,please enter again\n");
printf("Please choose p,m,t,d or q\n");
continue;
break;
}
}
printf("Bye!");
getchar();
getchar();
return 0;
}
char getfirst()
{
sel=getchar();
while(getchar()!='\n')
continue;
return sel;
}
void getnum()
{
printf("Please enter a number: ");
a=getfloat();
printf("Please enter another number :");
b=getfloat();
if(b==0 && sel=='d')
{
while(b==0)
{
printf("Please enter a number other than 0 :");
b=getfloat();
}
}
}
float getfloat()
{
float input;
char error;
while(scanf("%f",&input)!=1)
{
printf("\"");
while((error=getchar())!='\n')
putchar(error);
printf("\" is not a correct number,please enter again: ");
}
return input;
}
目的是为了让用户输入一个选项(+-*/),然后输入两个数字,按照选项进行运算,选项如果错误就会让用户重输入,可是运行时第一次可以正常选,第二次错误,第三次正确,第四次错误,如此交替,请问我哪里做错了?帮忙各位看一看......虽然已经是很久远的问题了,可是我真的很想搞清楚...谢谢
#include <stdio.h>
char sel;
float a,b;
char getfirst();
float getfloat();
void getnum();
int main()
{
while(sel!='q')
{
printf("Please enter your option: \n");
printf("p.plus m.minus\n");
printf("t.multiply d.divide\n");
printf("q.quit\n");
sel=getfirst();
sel=tolower(sel);
if(sel=='q')
break;
switch(sel)
{
case 'p':
getnum();
printf("%f+%f=%f\n",a,b,a+b);
break;
case 'm':
getnum();
printf("%f-%f=%f\n",a,b,a-b);
break;
case 't':
getnum();
printf("%f*%f=%f\n",a,b,a*b);
break;
case 'd':
getnum();
printf("%f/%f=%f\n",a,b,a/b);
break;
default:
printf("Wrong letter,please enter again\n");
printf("Please choose p,m,t,d or q\n");
continue;
break;
}
}
printf("Bye!");
getchar();
getchar();
return 0;
}
char getfirst()
{
sel=getchar();
while(getchar()!='\n')
continue;
return sel;
}
void getnum()
{
printf("Please enter a number: ");
a=getfloat();
printf("Please enter another number :");
b=getfloat();
if(b==0 && sel=='d')
{
while(b==0)
{
printf("Please enter a number other than 0 :");
b=getfloat();
}
}
}
float getfloat()
{
float input;
char error;
while(scanf("%f",&input)!=1)
{
printf("\"");
while((error=getchar())!='\n')
putchar(error);
printf("\" is not a correct number,please enter again: ");
}
return input;
}
目的是为了让用户输入一个选项(+-*/),然后输入两个数字,按照选项进行运算,选项如果错误就会让用户重输入,可是运行时第一次可以正常选,第二次错误,第三次正确,第四次错误,如此交替,请问我哪里做错了?帮忙各位看一看......虽然已经是很久远的问题了,可是我真的很想搞清楚...谢谢
-
- 帖子: 89
- 注册时间: 2009-08-18 20:35
Re: 小弟初学c,程序写的很烂,请大家帮忙看一个错误
额,发错地方了,谁来帮我?
- Lavande
- 论坛版主
- 帖子: 5352
- 注册时间: 2008-12-21 15:27
- 来自: TARDIS
-
- 帖子: 17
- 注册时间: 2010-07-22 18:08
Re: 小弟初学c,程序写的很烂,请大家帮忙看一个错误
貌似自己也作了一个命令行下的简单计算器,不过哦风格和LZ很不同,它的功能倒是简单了,但自己愣是把它弄成那种有很多个模块组成的
程序,编译还得写个Makefile ,想着以后有空把它扩展到更强大的计算功能,而不是简单加减乘除。
程序,编译还得写个Makefile ,想着以后有空把它扩展到更强大的计算功能,而不是简单加减乘除。
- Destine
- 论坛版主
- 帖子: 568
- 注册时间: 2009-05-05 20:45
-
- 帖子: 89
- 注册时间: 2009-08-18 20:35
Re: 小弟初学c,程序写的很烂,请大家帮忙看一个错误
代码: 全选
#include <stdio.h>
#include <ctype.h>
char sel;
float a,b;
char getfirst();
float getfloat();
void getnum();
int main()
{
while(sel!='q')
{
printf("Please enter your option: \n");
printf("p.plus m.minus\n");
printf("t.multiply d.divide\n");
printf("q.quit\n");
sel=getfirst();
sel=tolower(sel);
if(sel=='q')
break;
switch(sel)
{
case 'p':
getnum();
printf("%f+%f=%f\n",a,b,a+b);
break;
case 'm':
getnum();
printf("%f-%f=%f\n",a,b,a-b);
break;
case 't':
getnum();
printf("%f*%f=%f\n",a,b,a*b);
break;
case 'd':
getnum();
printf("%f/%f=%f\n",a,b,a/b);
break;
default:
printf("Wrong letter,please enter again\n");
printf("Please choose p,m,t,d or q\n");
continue;
break;
}
}
printf("Bye!");
getchar();
getchar();
return 0;
}
char getfirst()
{
sel=getchar();
while(getchar()!='\n')
continue;
return sel;
}
void getnum()
{
printf("Please enter a number: ");
a=getfloat();
printf("Please enter another number :");
b=getfloat();
if(b==0 && sel=='d')
{
while(b==0)
{
printf("Please enter a number other than 0 :");
b=getfloat();
}
}
}
float getfloat()
{
float input;
char error;
while(scanf("%f",&input)!=1)
{
printf("\"");
while((error=getchar())!='\n')
putchar(error);
printf("\" is not a correct number,please enter again: ");
}
return input;
}
-
- 帖子: 89
- 注册时间: 2009-08-18 20:35
Re: 小弟初学c,程序写的很烂,请大家帮忙看一个错误
首先,哪位帮我移动一下此帖?
- philbar
- 帖子: 35
- 注册时间: 2010-02-17 16:53
Re: 小弟初学c,程序写的很烂,请大家帮忙看一个错误
这个很简单getchar()会读到上面的缓冲区中的回车
每次成功读取后下面都不会读后面的
随便改了一下
楼主喜欢计算器的话推荐bc
每次成功读取后下面都不会读后面的
随便改了一下
代码: 全选
#include <stdio.h>
char sel;
float a, b;
char getfirst();
float getfloat();
void getnum();
int main()
{
while (sel != 'q') {
printf("Please enter your option: \n");
printf("p.plus m.minus\n");
printf("t.multiply d.divide\n");
printf("q.quit\n");
sel = getfirst();
sel = tolower(sel);
if (sel == 'q')
break;
switch (sel) {
case 'p':
getnum();
printf("%f+%f=%f\n", a, b, a + b);
break;
case 'm':
getnum();
printf("%f-%f=%f\n", a, b, a - b);
break;
case 't':
getnum();
printf("%f*%f=%f\n", a, b, a * b);
break;
case 'd':
getnum();
printf("%f/%f=%f\n", a, b, a / b);
break;
default:
printf("%c", sel);
printf("Wrong letter,please enter again\n");
printf("Please choose p,m,t,d or q\n");
continue;
break;
}
}
printf("Bye!");
getchar();
getchar();
return 0;
}
char getfirst()
{
sel = getchar();
while (getchar() != '\n')
continue;
return sel;
}
void getnum()
{
printf("Please enter a number: ");
a = getfloat();
printf("Please enter another number :");
b = getfloat();
if (b == 0 && sel == 'd') {
while (b == 0) {
printf("Please enter a number other than 0 :");
b = getfloat();
}
}
getchar();
}
float getfloat()
{
float input;
char error;
while (scanf("%f", &input) != 1) {
printf("\"");
while ((error = getchar()) != '\n')
putchar(error);
printf("\" is not a correct number,please enter again: ");
}
return input;
}
上次由 philbar 在 2010-08-19 18:12,总共编辑 1 次。
- philbar
- 帖子: 35
- 注册时间: 2010-02-17 16:53
Re: 小弟初学c,程序写的很烂,请大家帮忙看一个错误
lz的代码我只是用indent稍微改了一下缩进。。。不过还是有点囧阿
-
- 帖子: 89
- 注册时间: 2009-08-18 20:35
Re: 小弟初学c,程序写的很烂,请大家帮忙看一个错误
我不是喜欢计算器,只是学习c的菜单的一个练习,重点在于菜单的界面和错误输入的处理
-
- 帖子: 89
- 注册时间: 2009-08-18 20:35
Re: 小弟初学c,程序写的很烂,请大家帮忙看一个错误
谢谢这位仁兄philbar 写了:这个很简单getchar()会读到上面的缓冲区中的回车
每次成功读取后下面都不会读后面的
随便改了一下楼主喜欢计算器的话推荐bc代码: 全选
#include <stdio.h> char sel; float a, b; char getfirst(); float getfloat(); void getnum(); int main() { while (sel != 'q') { printf("Please enter your option: \n"); printf("p.plus m.minus\n"); printf("t.multiply d.divide\n"); printf("q.quit\n"); sel = getfirst(); sel = tolower(sel); if (sel == 'q') break; switch (sel) { case 'p': getnum(); printf("%f+%f=%f\n", a, b, a + b); break; case 'm': getnum(); printf("%f-%f=%f\n", a, b, a - b); break; case 't': getnum(); printf("%f*%f=%f\n", a, b, a * b); break; case 'd': getnum(); printf("%f/%f=%f\n", a, b, a / b); break; default: printf("%c", sel); printf("Wrong letter,please enter again\n"); printf("Please choose p,m,t,d or q\n"); continue; break; } } printf("Bye!"); getchar(); getchar(); return 0; } char getfirst() { sel = getchar(); while (getchar() != '\n') continue; return sel; } void getnum() { printf("Please enter a number: "); a = getfloat(); printf("Please enter another number :"); b = getfloat(); if (b == 0 && sel == 'd') { while (b == 0) { printf("Please enter a number other than 0 :"); b = getfloat(); } } getchar(); } float getfloat() { float input; char error; while (scanf("%f", &input) != 1) { printf("\""); while ((error = getchar()) != '\n') putchar(error); printf("\" is not a correct number,please enter again: "); } return input; }