0

私はコードブロックを使用して C++ プログラムを作成しましたが、最後の最後で、私たちが実験を行うために使用する学校のサーバーである empress を使用することにしましたが、それが機能しないことがわかりました! どういう意味ですか?私のプログラムは正しくありませんか?それともコンパイラの問題でしょうか?私は通常、コードブロックを使用してLinux ubuntuを使用してプログラミングを行います。Windowsを使用してプログラムをテストしましたが、動作しました。サーバー上で実行されないのはなぜですか?

問題の原因と思われるコードは次のとおりです。

bool dictionary::insertWordsIntoDict(string fileName)
{

   ifstream inp;
   string word;
   vector<string> vec;
   inp.open(fileName.data());

   if(inp.good())
   {

     while(!inp.eof())
     {
      inp>>word;
      vec.push_back(word);

     }
    string temp;
    string temp2= "#.txt";

     for(int i=0 ; i<vec.size() ; i++)
     {
          temp = vec[i];
          temp2[0] = tolower(temp[0]);
          cout<<temp<<endl;
          AddWord(temp.data(), temp2);
     }

   }//end of if statement

  else
  {
     cout<<":(  File does not exist! "<<endl;
     return failure;
  }

}// end of function insert words
4

2 に答える 2

2

while(!inp.eof())ファイルから読み取る良い方法ではありません。特に、EOF以外の何らかの理由で読み取れない場合、条件が false になることはなく、ループは永久に実行されます。

この種のループを記述する正しい方法は次のとおりです。

while(inp >> word)
 {
  vec.push_back(word);
 }

ここで、何らかの理由で入力ストリームから読み取ることができなかっinp >> wordた場合は false と評価されます。word

詳細がなければ、これがあなたの問題であるかどうかはわかりませんが、問題はありません。

于 2013-03-15T01:17:44.890 に答える
1

少なくとも 1 つの問題がありeofます。ループ条件で使用している場合は、次のように変更する必要があります。

while( inp >> word)
 {
  vec.push_back(word);

 }

この前のスレッドでは、ループ条件内の iostream::eof が間違っていると見なされる理由について説明しています。.

于 2013-03-15T01:17:56.800 に答える