c语言文本输入几组三角形边长的问题

[复制链接]
查看11 | 回复3 | 2008-11-11 11:33:40 | 显示全部楼层 |阅读模式
在线等待,回答的好我会额外奖励分,最高限额+20。
我做判断三角形的程序,我想要的是建立一个数据输入文本,内容是用户随便添加的N组三角形边长如:
1 2 3
4 5 6
3 3 3
然后对每组数据进行判断。我完成了结果的文本输出。
我现在做的程序代码如下:
#include
#include
#include
float a;
float b;
float c;
int k;
void writefile(){

FILE* fp;

int i;

if((fp=fopen("result.txt", "a+"))==NULL) exit(0);

fprintf(fp,"%f %f %f",a,b,c);

switch(k)

{
case 5:fprintf(fp,"\t\t\t边长存在小数\n");break;

case 1:fprintf(fp,"\t\t\t输入越界\n");break;

case 2:fprintf(fp,"\t\t\t等边三角形\n");break;

case 3:fprintf(fp,"\t\t\t等腰三角形\n");break;

case 4:fprintf(fp,"\t\t\t普通三角形\n");break;

case 0:fprintf(fp,"\t\t\t非三角形\n");break;

default:fprintf(fp,"\t\t\tERROR\n");exit(0);}

fclose(fp); }
int main(){

char d='Y';

printf("请输入边长a,b,c(1~100的整数):\n");

while (d=='Y'){


scanf("%f %f %f",&a,&b,&c);

if(int(a)-a100)||(a100)||(b100)||cc)&&(a+c>b)&&(b+c>a)){

if((a==b)&&(b==c)) k=2;

else if(((a==b)||(b==c)||(a==c))&&(!((a==b)&&(b==c)))) k=3;

else k=4;}

else k=0;

writefile();

printf("是否继续输入?输入Y为继续输入,输入其他任意字符,则程序退出。");

scanf("%s",&d);}

return 0; }
我提问最主要的问题是建立 文本输入数据流 的解决方案,整数判断问题可以暂缓
确实是判断整数有问题,请赐教!
同时把文本输入的也指导下吧,呵呵
您的解释还是不能判断 如:3.0000和3的问题啊?

回复

使用道具 举报

千问 | 2008-11-11 11:33:40 | 显示全部楼层
int(x)-x是始终小于0的例如int(4.5)-4.5=4-4.5=-0.5所以你直接可以写k=5;最大的错误是writefile()中没有参数我改了在下面:#include #include #include float a; float b; float c; int k; void writefile(float a,float b,float c,int k){ FILE* fp; if((fp=fopen("result.txt", "a+"))==NULL) exit(0); fprintf(fp,"%f %f %f...
回复

使用道具 举报

千问 | 2008-11-11 11:33:40 | 显示全部楼层
有语法错误:1、强制转换类型 if(int(a)-a<0||int(b)-b<0||int(c)-c<0) 这里要写成 (int)a 这样的形式;2、scanf() 函数用法错误d 声明为 char 型,然在最后的输入时,却控制格式为 %s,这是非法的使用;如果改成 %c 格式,就会涉及到一个字符接收缓冲的问题,不然你的程...
回复

使用道具 举报

千问 | 2008-11-11 11:33:40 | 显示全部楼层
输入的解决方法你参考一下while(scanf("%f",&a)!=EOF){
scanf("%f%f"&b,&c);}整数的问题能不能这样判断以判断一个为例:if((float)((int)a)==a)其实3.0000可以算整数了...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行