今天我在编写程序时从文件和命令行读取都遇到了问题。
我使用此功能检查文件是否存在。
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;再输入命令。
我的代码错误在哪里?
感谢您的帮助。
答案 0 :(得分:2)
freopen("DOCGIA.TXT", "r",stdin);
这一行关闭旧的stdin
,它是来自控制台的输入流。由于您从控制台关闭了输入流,因此您无法从控制台读取输入流也就不足为奇了 - 即使您以不同的方式(通过cin
而不是stdin
执行此操作)。