0

テキスト ファイルを読み取り、テキスト ファイルの最初の行で 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)
   {}
4

2 に答える 2

1
#include <iostream>
#include <fstream>
#include <cstdio>
#include <cstdlib>
using namespace std;

bool isValidNumber (string str)
{
  if (str.length() > 2 || str.length() == 0)
    return false;
  else if (str.length() == 2 && str != "10")
    return false;
  else if (str.length() == 1 && (str[0] < '0' || str[0] > '9'))
    return false;
  return true;
}

int main()
{
  ifstream fin(argv[1]);
  if(!fin.good())
  {
    cout<<"File does not exist ->> No File for reading";
    exit(1);
  }

  //To check file is empty http://stackoverflow.com/a/2390938/1903116
  if(fin.peek() == std::ifstream::traits_type::eof())
  {
    cout<<"file is empty"<<endl;
    exit(1);
  }
  string tmp;
  getline(fin,tmp);
  if (isValidNumber(tmp) == false)
  {
    cerr << "Invalid number : " + tmp << endl;
  }
  else
  {
    cout << "Valid Number : " + tmp << endl;
  }
}
于 2013-08-13T03:57:27.900 に答える