该类函数CLASS :: READWRITE应该从输入文件中读取数据,并且只有在其输入值为int类型时才写入输出文件。当我输入一个浮点值作为x传递时,小数位被截断,函数正常执行而不是输出警告。如果像'b'这样的小写字母作为x传递,则该值显然读为“0”,所以函数正常执行而不是输出警告。在C++中检查函数参数数据类型
如何执行检查(x!= int)?我见过使用cin.fail()的建议,但我没有在这里使用cin。
#include <iostream>
#include <fstream>
using namespace std;
ifstream input_file("in_file", ios::in);
ofstream output_file("out_file", ios::out);
int main(void)
{
CLASS object(n); // n is the number of values held in in_file
object.READWRITE(x); // x is some test value
}
void CLASS::READWRITE(int x)
{
int i;
for(i = 0; i < n; i++)
{
input_file >> number[i];
}
for(i = 0; i < n; i++)
{
if((x != int) || (x < 0))
{
out_file << "Error" << endl;
break;
}
else
{
out_file << num[i] << endl;
}
}
}
在我看来,你正在寻找'typeof'函数。虽然它不是C标准,但仍然被广泛使用。检查此链接http://stackoverflow.com/questions/12081502/typeof-operator-in-c。另外,关于你的其他问题......你正在遭受'隐式转换'。大多数简单的数据类型(char,int,float等)可以隐式转换为对方。你会失去精确度,但就是这样。如果你真的想知道你的文件是什么东西,你需要检查字符串,而不是数字。 – 2013-02-24 21:18:33
整数字符串如何与其他字符串区分? – photon 2013-02-24 21:22:21
够简单。扫描任何不是整数的东西。第一步:获取字符串(两个分隔符之间的任何内容,如空格,换行符等)第二步:检查任何不是这个字符串中的数字。如果有任何不在48-57的范围内(都包括,0-9的ASCII值),它不是一个整数。 – 2013-02-24 21:24:45