【发布时间】:2013-08-13 02:54:55
【问题描述】:
我正在编写一个程序,它需要读取一个文本文件并检查文本文件的第一行是否有 0 到 10 之间的数字。我想出了几个解决方案,但仍然存在问题:
我是如何阅读文件的:
const string FileName= argv[1];
ifstream fin(argv[1]);
if(!fin.good()){
cout<<"File does not exist ->> No File for reading";
exit(1);
}
getline(fin,tmp);
if(fin.eof()){
cout<<"file is empty"<<endl;
}
stringstream ss(tmp);
首先我使用了atoi:
const int filenum = atoi(tmp.c_str());
if(filenum<1 || filenum>10){
cout<<"number of files is incorrect"<<endl;
//exit(1);
}
如果第一行是一个字符,把它改为零但是我想调用一个异常并终止程序。
然后我使用了isdigit,但我的条目是一个字符串,它不适用于字符串。
最后我使用了字符串中的每个字符,但仍然不起作用。
stringstream ss(tmp);
int i;
ss>>i;
if(isdigit(tmp[0])||isdigit(tmp[1])||tmp.length()<3)
{}
【问题讨论】:
-
你能说明你是如何从文件中读取的吗?在进行完整性检查时,您必须使用
&&操作而不是||。否则,您可以在提取操作后测试流的状态/标志。 -
我已经编辑了,所以你可以看到我是如何阅读文件的
-
好的。对于错误检查,您可以尝试 -
if ( !(ss >> i) ) { std::cerr << "Invalid number."; } -
我已经检查过了。问题是如果条目是 10D 它只读取 10 并在最后忽略 d?
标签: c++