【问题标题】:Infinite While Loop and Getting Incorrect Output无限循环并获得不正确的输出
【发布时间】:2015-12-23 19:57:20
【问题描述】:

我目前正在尝试构建一个程序,该程序读取文件,扫描该文件,并输出该文件中由“标记”包围的所有单词。我目前很难过,希望能得到一些帮助!

#include <iostream>
// For file I/O:
#include <fstream>
#include <cstdlib>
#include <iomanip>

using namespace std;

// Prototype the count function so we can have it below it's first
// use in main().
void count(istream& in, int& lines, int& words, int& characters);
/*
 * wc <filename>
  */

int main(int argc, char *argv[])
{
 if (argc < 2) {
   cerr << "Usage: wc <filename>" << endl;
  return 0;
 }
 // Open the file specified by argv[1] for reading:
  // Constructs a ifstream object called "in":
  ifstream in(argv[1]);
  // Was there a problem opening the file?
  if (!in.good()) {
   cerr << "Unable to open file [" << argv[1] << "] for reading." << endl;
   return 1;
  }

   int lines = 0, words = 0, characters = 0;
  count(in, lines, words, characters);
   cout << setw(5) << lines << " " << words << " " <<
    characters << " " <<           argv[1] << endl; 

  // Close the input stream:
  in.close();
   }

   void count(istream& in, int& lines, int& words, int& characters) 
   {
   int i;
   char s;
   int ch;
   bool inword = false;

  // Read until the end of file is reached, or there was an error:
  while (!in.eof()) {
   // Read a character from the input stream "in":
    s = in.get(); //Set char s = in.get
     for(i=0; s != 0; i++){ //Loop to iterate through the characters
      while(s == '"'){ //While s is equal "
       cout << s << endl; // Print s
        if(s == '"') // If we hit another ", then we break
        break;
      }
    }
    if (in.good() == false) return;
   characters++;
   if (!isspace(ch) && !inword) {
    inword = true;
    words++;
    } else if (isspace(ch) && inword) {
     inword = false;
    }
    if (ch == '\n') lines++;
    }
    }

【问题讨论】:

    标签: c++ function if-statement for-loop while-loop


    【解决方案1】:

    您的算法似乎错误.. 在 for 循环中您与 's' 进行比较,但您没有更新它... 在您的主循环中尝试这样的操作(QnD):

    while (!in.eof() && (s = in.get()) != '"'); // read to first quote char
    /* this is the word we want.. run to end quote marks.. */
    while (!in.eof() && (s = in.get()) != '"') {
        cout << s;
    }
    cout << endl;
    

    【讨论】:

    • 我这样做了,但我似乎仍在无限循环。它也没有打印任何东西,它似乎只是在 cout-ing endl。
    • 忽略最后一条评论,我知道它为什么会无限循环。我现在遇到 seg 错误.. 任何 cmets 说明为什么会这样?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多