从文件和控制台窗口读/写 - C ++

时间:2016-01-18 20:27:21

标签: c++ debugging

今天我在编写程序时从文件和命令行读取都遇到了问题。

我使用此功能检查文件是否存在。

bool fexists(const char *filename)
{
    ifstream ifile(filename);
    if (ifile.good()) {
        ifile.close();
        return true;
    }
    ifile.close();
    return false;
}

然后,如果它存在,我读了一些预编程的数据库:

if (fexists("DOCGIA.TXT")) {
        freopen("DOCGIA.TXT", "r",stdin);
        // read somethings as usual
        fclose(stdin);
        puts(" People Database Loaded!");
    }
    else {
        puts(" People Database Doesn't Exist! \n --> New Database!");
    }
puts(" Press Enter to continue...");
getch();

然后我会显示一个菜单(在控制台窗口中):

void ShowMenu() {
    int command;
    do {
        system("cls");
        puts("1. st");
        puts("2. nd");
        puts("3. rd. ");
        puts("0. exit!");
        cout << " --- enter command: "; cin >> command;
        if (command == 0) break;
        system("cls");
        switch (command) {
        case 1: func1();
            break;
        case 2: func2();
            break;
        case 3: func3();
            break;
        }
    } while (command != 0);
    puts(" BYE BYE ");
}

但是当我运行程序时,它正常加载(我从控制台看到 - 确定),但菜单闪烁(它出现,消失,等等 - 对不起我的英语不好),所以我可以&#39;再输入命令。

我的代码错误在哪里?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

freopen("DOCGIA.TXT", "r",stdin);

这一行关闭旧的stdin,它是来自控制台的输入流。由于您从控制台关闭了输入流,因此您无法从控制台读取输入流也就不足为奇了 - 即使您以不同的方式(通过cin而不是stdin执行此操作)。