从文件中读取cin不起作用

时间:2017-01-26 00:49:51

标签: c++ cin istream

我正在开发一个项目,我必须使用命令行重定向从文本文件中读取字典(即./myprog myargs< in.txt)

然后我将cin传递给一个函数来构造一个字典对象。

Private Sub dp_TextChanged(sender As Object, e As EventArgs) Handles dp.TextChanged
        If dp.Text = "" Then GoTo line1
        i = Asc(dp.Text)
        If i = 8 Then
            domainp.Text = domainp.Text.Remove(domainp.Text.Length - 1)
        End If
        If dp.Text = "" Or dp.Text = " " Or dp.Text = "." Then GoTo line1
        domainp.Text = domainp.Text & dp.Text
        domain_prefix = domainp.Text
        dp.Text = ""
        i = 0
line1:
    End Sub

int main(int argc, char *argv[]) {

Dictionary all_words(std::cin);
Dictionary solution;
std::deque <Word> possible_additions;

std::cout << all_words[0].get_word() << " this is a word" << '\n';

opterr = true;
static struct option longopts[] = {
    { "stack",    no_argument,       nullptr,    's' },
    { "queue",    no_argument,       nullptr,    'q' },
    { "change",   no_argument,       nullptr,    'c' },
    { "swap",     no_argument,       nullptr,    'p' },

我的问题是没有任何内容被添加到词典中。但是,如果我使用文件名的ifstream初始化字典,它可以正常工作。

即:

Dictionary::Dictionary(std::istream& is) {
char type;
int size;
std::string line;
int i = 0;

is >> type >> size;

words.reserve(size);

while (!is.eof()) {
    getline(is, line);

    if (type == 's') {
        if ((line.length() == 0 || line[0] == '/') &&
            (line.length() == 0 || line[1] == '/'))
        {
            continue;
        }

        else {
            std::cout << line << '\n';
            words.push_back(line);
            ++i;
        }
    }

工作正常并构建字典。

使用MSVS时我没有遇到这个问题,但是现在我使用gcc它似乎无法正常工作。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

看起来像是eof()。从来没有意识到它可能导致的问题。将其更改为getline(is,line)修复它