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

在线等待,回答的好我会额外奖励分,最高限额+20。
我做判断三角形的程序,我想要的是建立一个数据输入文本,内容是用户随便添加的N组三角形边长如:
1 2 3
4 5 6
3 3 3
然后对每组数据进行判断。我完成了结果的文本输出。
我现在做的程序代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
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)-a<0||int(b)-b<0||int(c)-c<0)
k=5;
else if(((a>100)||(a<1))||((b>100)||(b<1))||((c>100)||c<1)) k=1;
else if((a+b>c)&&(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的问题啊?

第1个回答  2008-11-11
int(x)-x是始终小于0的
例如int(4.5)-4.5=4-4.5=-0.5
所以你直接可以写k=5;
最大的错误是writefile()中没有参数
我改了在下面:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
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",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(){
int k;
char d='Y';
printf("请输入边长 a,b,c(1~100的整数): \n");
while (d=='Y'||d=='y')/*可能会有人输错大小写*/
{ scanf("%f %f %f",&a,&b,&c);
k=5;
if(((a>100)||(a<1))||((b>100)||(b<1))||((c>100)||c<1)) k=1;
else if((a+b>c)&&(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(a,b,c,k);
printf("是否继续输入?输入Y为继续输入,输入其他任意字符,则程序退出。");
scanf("%s",&d); }
return 0; }
第2个回答  2008-11-11
有语法错误:

1、强制转换类型
if(int(a)-a<0||int(b)-b<0||int(c)-c<0)

这里要写成 (int)a 这样的形式;

2、scanf() 函数用法错误

d 声明为 char 型,然在最后的输入时,却控制格式为 %s,这是非法的使用;如果改成 %c 格式,就会涉及到一个字符接收缓冲的问题,不然你的程序到那里就会自动退出,解决的办法是,修改 scanf 为:

sacnf("%c",&d);
d = getchar(); /*这句是用来接受回车的,不然回车会给d 变量接收去*/

楼上的也没必要把几个参数传给 writefile,因为那几个是全局变量,不传也不会有错误,更不是什么最大的错误。最大的错误就是后面的 scanf 函数的使用错误。

----------------读取参考程序---------------------------
#include <stdio.h>

int main()
{
FILE *ptr;
int i = 0;
int a,b,c;

if( ( ptr = fopen("test.txt", "r") ) == NULL )
printf("File could not be opened!\n");
else{
fscanf( ptr, "%d %d %d", &a,&b,&c);

while( !feof( ptr ) ){
printf("%d %d %d\n", a, b, c);
fscanf( ptr, "%d %d %d", &a,&b,&c);
}

fclose( ptr );
}

return 0;
}
-------------------程序结束--------------------
假设文本中存的数据格式为:
10 20 30
11 21 22
31 31 38
那么可以每次读出一组后进行判断;我的参考程序中没有添加判断功能。本回答被提问者采纳
第3个回答  2008-11-11
输入的解决方法你参考一下
while(scanf("%f",&a)!=EOF)
{
scanf("%f%f"&b,&c);
}

整数的问题能不能这样判断
以判断一个为例:
if((float)((int)a)==a)
其实3.0000可以算整数了
第4个回答  2008-11-11
scanf("%f %f %f",&a,&b,&c);
if(int(a)-a<0||int(b)-b<0||int(c)-c<0)
k=5;

算法有问题,语法也有问题

不能通过你的这种方法来判断输入的是否是整数
第5个回答  2008-11-13
String str=Textbox1.Text