注册 登录
编程论坛 C++教室

[求助]类型输入不匹配问题

溪水 发布于 2007-04-07 10:25, 530 次点击
要求输入的数是float型,但你输入string类型,怎样写代码才可以提示你输入的类型错误

[此贴子已经被作者于2007-4-7 12:11:57编辑过]

5 回复
#2
Garand2007-04-07 11:39

76

[此贴子已经被作者于2007-4-7 14:57:24编辑过]

#3
wfpb2007-04-07 14:33

LS:这个相当于
if(num<0)
cout<<"输出正整数"<<endl;
......

LZ:
想要避免输入字符串后出现错误,你就把读入类型设置为string,然后判断是否格式正确(对于你就是查看是否是数字)
正确则把string转换成你要的格式,比如int.
格式不正确则随便你怎么处理了

#4
Garand2007-04-07 14:56
整型的话:
#include<iostream>
#include<string>
using namespace std;
int main()
{
cout<<"输入字符串:";
string str1,
str2;
getline(cin,str2);
bool judge=false;
for(int i=0;i!=str2.size();++i)
{
if(!isdigit(str2[i]))
{
judge=true;
}
}
if(judge)
{
cout<<"类型错误";
}
else
{
str1=str2;
}
return 0;
}
#5
溪水2007-04-07 22:11

首先谢谢各位的回帖,也许是由于我没有把问题说清,才给大家带来了麻烦。现在我把问题再说的详细点,顺便把我做写出来的程序贴出来,希望大家多提点意见

题目类型[软件测试]
问题:用C或C++语言写一个通过输入三角形的三边生成一个三角形的程序,要求程序尽可能多的满足测试用例(普通三角形、等腰、等边三角形)。错误的测试用例要提示,例如:边出现负数、零、字符型的要提示出错

代码:#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <vector>

using namespace std;

int IsTri(float a,float b,float c)
{
if(a+b<=c)
{ cout<<"The edges cannot be TRI!"<<endl;
return 0;

}

else
if(a+c<=b)
{ cout<<"The edges cannot be TRI!";
return 0;

}
else

if(b+c<=a)
{ cout<<"The edges cannot be TRI!";
return 0;

}
else
return 1;

}
}


int main( )
{

float a,b,c;
int res;

cout<<"Please input 3 edges:\n"<<endl;

float n[3];
int ret,i=0;

while(i<=2)
{
do{
printf("input:");
ret=scanf("%f",&n[i]); //这里如果输入2e的话不会提示出错,因为我的编译器把它e默认为2.71929

while(getchar()!='\n')
ret=0;

if(ret!=0) i++;

if(ret==0)
cout<<"Please Input again\n";

}while(ret!=1);

}


if(n[0]==0||n[1]==0||n[2]==0)//判断是否为零值

cout<<"The value of Tri cannot be zero!"<<endl;

if(n[0]<0||n[1]<0||n[2]<0)//判断是否为负值

cout<<"The value of Tri cannot be a negative number!"<<endl;


res=IsTri(n[0],n[1],n[2]);

if(res)
{
cout<<n[0]<<" "<<n[1]<<" "<<n[2]<<" can make a Tri\n"<<endl;

}

if(n[0]==n[1]&&n[1]==n[2])

cout<<"It's a zheng Tri\n"<<endl;

else if(n[0]==n[1]||n[1]==n[2]||n[0]==n[2])

cout<<"It's a deng yao Tri\n"<<endl;

else

cout<<"It's a general Tri\n"<<endl;

return 0;
}

[此贴子已经被作者于2007-4-7 22:25:38编辑过]

#6
wfpb2007-04-08 14:50

请先仔细看清除我们的回答,我们就是在解释这个一丝

1