我试图将一组输入文件中的单词读入3个不同的字符串数组中。文件中的单词用“#”分隔。由于某种原因,我的代码运行了两次,第一个数组为空,单词为。请帮助,我的循环肯定是错误的,我必须忽略一些东西。请让我知道我在做什么错。谢谢

 Sample input file (input.txt)

complicated
insinuated
complex
juggernaut
#
blah
...
...
#
...



#include <iostream>
#include <fstream>
#include <string>
#include "conio.h"

using namespace std;

int main() {

ifstream inFile("dictionary.txt");

// Check for error
if (inFile.fail()){
    cout << "Error Opening File." << endl;
    exit(1);
}

string hard[27], medium[29], easy[33];
string getHardWord, getMedWord, getEasyWord;
int hardCount = 0, medCount = 0, easyCount = 0, delimitCount; // n is number of #
  // delimiters and count is array position

// Read the dictionary file until the end of file
while (inFile){
    inFile >> getHardWord;

    while ((getHardWord != "#") && (delimitCount = 0)){
        hard[hardCount] = getHardWord;
        hardCount++;
        inFile >> getHardWord;
    }

    delimitCount++;
    cout << delimitCount << endl;

    for (int iii = 0; iii < 27; iii++){
        cout << hard[iii] << endl;
    }

    cout << endl;

    inFile >> getMedWord;

    while ((getMedWord != "#") && (delimitCount = 1)){
        medium[medCount] = getMedWord;
        medCount++;
        inFile >> getMedWord;
    }

    delimitCount++;
    cout << delimitCount << endl;

    for (int jjj = 0; jjj < 27; jjj++){
        cout << medium[jjj] << endl;
    }

    cout << endl;

    inFile >> getEasyWord;

    while ((getEasyWord != "#") && (delimitCount = 2)){
        easy[easyCount] = getEasyWord;
        easyCount++;
        inFile >> getEasyWord;
    }

    delimitCount++;
    cout << delimitCount << endl;

    for (int kkk = 0; kkk < 27; kkk++){
        cout << easy[kkk] << endl;
    }

    inFile.close();
}

_getch();

return 0;
}

最佳答案

此代码和示例文本文件中存在一些小错误:

1-示例文件的末尾应带有#,否则最后一个循环将永远运行。

2

while ((getHardWord != "#") && (delimitCount = 0))

因为delimitCount将为零,所以它将始终为false。您应该在其声明中将delimitCount初始化为零,并在此循环中删除分配,以使其变为:
while (getHardWord != "#")

3-如果要在最后关闭文件,则while条件应该是检查文件是否打开,所以不要:
while (inFile)


while (inFile.is_open())

我通过这些更改对您的代码进行了测试,效果很好:
// Test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include "conio.h"

using namespace std;

int main() {

ifstream inFile("dictionary.txt");

// Check for error
if (inFile.fail()){
    cout << "Error Opening File." << endl;
    exit(1);
}

string hard[27], medium[29], easy[33];
string getHardWord, getMedWord, getEasyWord;
int hardCount = 0, medCount = 0, easyCount = 0, delimitCount=0; // n is number of #
  // delimiters and count is array position

// Read the dictionary file until the end of file
while (inFile.is_open()){
    inFile >> getHardWord;

    while ((getHardWord != "#")){
        hard[hardCount] = getHardWord;
        hardCount++;
        inFile >> getHardWord;
    }

    cout<<hard<<endl;

    cout<<endl;


    delimitCount++;
    cout << delimitCount << endl;

    for (int iii = 0; iii < 27; iii++){
        cout << hard[iii] << endl;
    }

    cout << endl;

    inFile >> getMedWord;

    while ((getMedWord != "#") && (delimitCount = 1)){
        medium[medCount] = getMedWord;
        medCount++;
        inFile >> getMedWord;
    }

    delimitCount++;
    cout << delimitCount << endl;

    for (int jjj = 0; jjj < 27; jjj++){
        cout << medium[jjj] << endl;
    }

    cout << endl;

    inFile >> getEasyWord;

    while ((getEasyWord != "#") && (delimitCount = 2)){
        easy[easyCount] = getEasyWord;
        easyCount++;
        inFile >> getEasyWord;
    }

    delimitCount++;
    cout << delimitCount << endl;

    for (int kkk = 0; kkk < 27; kkk++){
        cout << easy[kkk] << endl;
    }

    inFile.close();

}

_getch();

return 0;
}

关于c++ - 在C++中一次从输入文件读取一个单词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19557622/

10-11 22:54
查看更多