2015-09-25 32 views
-1

我目前正在尝试构建一个程序,该程序读取文件,扫描该文件,并输出包含“标记”的文件中的所有单词。我当前难住并希望获得!一些帮助无限循环和获取不正确的输出

#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++; 
    } 
    } 

回答

0

你的算法似乎是错误的。在for循环你比较的“,但你不更新它...尝试在你的主循环像这样(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; 
+0

我做到了,但我似乎仍然无限循环,它也没有打印任何东西,它似乎只是cout结束。 – Frebadyia

+0

忽略最后的评论,我想出了为什么它无限循环。我现在正在陷入seg故障..对此有何评论? – Frebadyia

+0

也许使用gdb? – Karthik