【发布时间】:2013-02-24 21:14:17
【问题描述】:
这个类函数 CLASS::READWRITE 应该从输入文件读取数据并写入输出文件,前提是它的输入值是 int 类型。当我输入一个浮点值作为 x 传递时,小数位被截断并且函数正常执行而不是输出警告。如果像“b”这样的小写字母作为 x 传递,则该值显然被读取为“0”,因此函数正常执行而不是输出警告。
如何执行检查 (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 标准中,但它仍然被广泛使用。检查此链接stackoverflow.com/questions/12081502/typeof-operator-in-c。另外,关于您的其他问题……您正在遭受“隐式转换”的困扰。大多数简单的数据类型(char、int、float 等)都可以相互隐式转换。你会失去精确度,但就是这样。如果您真的想知道文件中的内容是什么,则需要检查字符串,而不是数字。 -
整数字符串和其他字符串有什么区别?
-
很简单。扫描任何不是整数的东西。第一步:获取字符串(两个分隔符之间的任何内容,如空格、换行符等)。 第二步:检查该字符串中不是数字的任何内容。如果有任何东西不在 48-57 的范围内(包括 0-9 的 ASCII 值),则它不是整数。
标签: c++