此类函数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;
}
}
}
答案 0 :(得分:2)
这不是您正在寻找的,但如果您想确保只传输整数,则必须检查字符串。虽然您特别要求使用C ++,但我对C文件处理更加满意,所以请耐心等待。
FILE *fp = fopen("input.file", "rb"), op = fopen("output.file", "wb");
if(fp && op) {
while(!feof(fp)) {
char buffer[20], *ptr = buffer;
fscanf(fp, "%20[^\s\n]", buffer);
while(ptr && *ptr != 0) {
if(*ptr >= '0' && *ptr <= '9') ++ptr;
else ptr = 0;
}
if(ptr) fprintf(op, "%s", buffer);
}
fclose(fp);
fclose(op);
}
简而言之,此代码扫描整个文件以查找由空格或换行符分隔的块(假设任何一个数字不超过20个字符。)在下一步中,它会检测所讨论的字符是否为一个数字(在这种情况下指针向上移动一步),或不。在后一种情况下,字符串作为整数无效并被丢弃(指针设置为0,这反过来使循环后的'write'无效。
我相信这应该是你想要的。
答案 1 :(得分:1)
您将参数x声明为int,因此它是一个int
void CLASS::READWRITE(int x)
传入double或char时,编译器会隐式地将它们转换为整数值。对于双精度,这意味着在小数之后截断,对于chars,编译器将ascii表示视为整数。
假设,正如其他人所知,参数x来自用户/文件输入,您必须手动检查每个输入字符串以确保它是有效整数。如果输入是二进制的,那么由于数据是上下文敏感的,所以无法判断。