【记录】如何判断输入的数值类型是否合理?如何判断浮点型数据相等?

记录

19.8.15 16:33
在敲课本上实验题GuessNumber时出现的问题
想知道如果输入的数值的类型为字符之类的该如何剔除(判断)

【Java】判断输入的数值类型

//Test_PanDuan.java
import java.util.Scanner;
public class Test_PanDuan {
	public static void main(String args[]){
		long Long;
        String string;
        double Double;
        Scanner reader =new Scanner(System.in);
        System.out.println("输入一个整数\n");
        if(reader.hasNextInt()){
			Long = reader.nextLong();
			System.out.println("您输入的是一个整数:"+Long);
        }
        else if(reader.hasNextDouble()){
			Double =reader.nextDouble();
			System.out.println("您输入的是一个小数:"+Double);
		}
        else if (reader.hasNext()){
			string = reader.nextLine();
			System.out.println("您输入的是一个字符串:"+string);
		}
	}
}

在这里插入图片描述

【C++】判断输入的数值类型

如果输入的值不是预设的数据类型那么输入流将会关闭的,这以后就不能再输入了。。。所以你如果碰到了输入流出错,也就是它关闭了,就月证明输入的数据不是预设的类型
——百度
可以这样写
cin>>a;
if(cin.fail())//如果输入错误
{
cin.clear();//消除错误,这样cin才能重新输入数据
你的处理。。。。
}

//下面给出一个方法,很笨,但应该是对的。——百度	//正在研究中
#include<iostream>
using namespace std;
bool IsNumber(char *str){
	int nLen = strlen(str);		// 判断小数的话只需要增加小数点的处理就好了
	int nCount = 0;		// 记录小数点的个数
	for (int i=0; i<nLen; i++){
		if (str[i] < '0' || str[i] > '9'){
			return false;
		}
		// 判断小数点
		if (str[i] == '.'){
			if (nCount == 0){
				nCount++;
			}
			else{
				return false;
			}
		}
	}
	return true;
}
int main()
{
	char str[100];
	do{
		cin.getline(str, sizeof(str));
	} while(!IsNumber(str));
}

因为下学期不学C了所以把重点放在了Java上 (・∀・(・∀・(・∀・*)

#include<iostream> 
using namespace std;
int main()
{
	int iInput;
	cout << "Please input a number:" << endl;
	while(!(cin >> iInput)){
		cout << "Wrong,you have inputed a wrong type data\n" << endl;
		cin.clear();	//清除错误标记,重新打开输入流,但是输入流中依旧保留着之前的不匹配的类型
		//cin.sync(); //清除cin缓存区的数据 
		while(cin.get() != '\n'){
			continue;
		} 
		cout << "Please input again" << endl;
	} 
	cout << "The number is:" << iInput << endl;
	system("pause");
	return 0;
}

C++最后的这一段代码摘自yxswhy的博客
还没看懂<0_0>

在这里插入图片描述

浮点数常常无法精确表示

浮点数0.1在计算机中就无法精确表示,因为十进制的0.1换算成二进制是一个无限循环小数,很显然,无论使用float还是double,都只能存储一个0.1的近似值。但是,0.5这个浮点数又可以精确地表示。因为浮点数常常无法精确表示,因此,浮点数运算会产生误差:
由于浮点数存在运算误差,所以比较两个浮点数是否相等常常会出现错误的结果。正确的比较方法是判断两个浮点数之差的绝对值是否小于一个很小的数

// 比较x和y是否相等,先计算其差的绝对值:
double r = Math.abs(x - y);
// 再判断绝对值是否足够小:
if (r < 0.00001) {
    // 可以认为相等
} else {
    // 不相等
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值