如果我为 std::cin >> menu; 输入数字 2,则 std::cin >> menu; 之后的代码不会执行。 起初,我认为问题出在函数中,但代码甚至没有转到开关(我已在开关中使用 std::cout 和 std::cin >> menu; 之后对其进行调试)。
我输入2后,就卡在那里,就像加载一些大型进程一样,而我所做的只是将菜单作为开关参数。
我的代码有什么问题有人可以帮忙吗?
#include <iostream>
#include <fstream>
#include <unistd.h>
struct jadwal {
std::string Jurusan;
int Jam;
int Durasi;
};
void daftarMenu() {
std::cout << "aplikasi pertemuan" << std::endl;
std::cout << "menu : " << std::endl;
std::cout << "[1]. Input" << std::endl;
std::cout << "[2]. Output" << std::endl;
std::cout << "[3]. Hasil" << std::endl;
std::cout << "[4]. Exit" << std::endl;
}
void inputJadwal() {
int jumlah;
jadwal jadwal[100];
std::cout << "Masukkan jumlah jadwal yang ingin ditambahkan : ";
std::cin >> jumlah;
std::ofstream file;
file.open("file1.txt", std::ios::app);
if(!file) {
file.open("file1.txt", std::ios::trunc);
};
for(int i = 0; i < jumlah; i++) {
std::cin.ignore();
std::cout << "Jurusan : ";
getline(std::cin, jadwal[i].Jurusan);
file << jadwal[i].Jurusan;
file << std::endl;
std::cout << "Jam : ";
std::cin >> jadwal[i].Jam;
file << jadwal[i].Jam;
file << std::endl;
std::cout << "Durasi : ";
std::cin >> jadwal[i].Durasi;
file << jadwal[i].Durasi;
file << std::endl;
};
file.close();
std::cout << "Data berhasil di input, mengembalikan ke menu utama..." << std::endl;
sleep(2);
};
void outputJadwal() {
jadwal jadwal[100];
std::ifstream file;
file.open("file1.txt");
std::cout << "tes";
if(!file) {
std::cout << "Tidak ada jadwal terdaftar" << std::endl;
sleep(2);
return;
};
std::cout << "tes";
int index = 0;
while(!file.eof()) {
file >> jadwal[index].Jurusan;
file >> jadwal[index].Jam;
file >> jadwal[index].Durasi;
index++;
}
int total = index + 1;
for(int i = 0; i < total; i++) {
std::cout << "Jurusan : " << jadwal[i].Jurusan;
std::cout << "Jam " << jadwal[i].Jam;
std::cout << "Durasi " << jadwal[i].Durasi;
}
file.close();
};
void hasilJadwal() {
};
int main() {
int menu;
int jumlah;
do{
//
daftarMenu();
std::cout << "Pilih : ";
std::cin >> menu;
// this code won't execute if i enter number 2 for the menu, but it is okay if i enter 1, 3, 4, 5, or more
std::cout << "you are choosing menu " << menu;
switch(menu) {
case 1:
inputJadwal();
break;
case 2:
std::cout << "case 2 selected";
outputJadwal();
break;
case 3:
hasilJadwal();
break;
case 4:
std::cout << "Mengeliminasi program...";
return 0;
default:
std::cout << "Input tidak valid, mengembalikan ke menu utama..." << std::endl;
sleep(2);
break;
}
}while(true);
return 0;
}
我已经尝试过 Chat GPT 中的这个解决方案,但它没有任何作用。
if(std::cin.fail()) {
std::cerr << "Error: Invalid input. Clearing input buffer and retrying..." << std::endl;
std::cin.clear(); // Clear the error flags
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // Discard invalid input
sleep(2);
continue; // Retry the loop
}
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
我个人不认为我的代码有任何问题,至少在 int main() 中,因为我的问题只在 int main();
嗯,我已经很久没有编写 C++ 程序了,但我确实看过代码。
正如所提供的那样,它根本无法编译。首先,函数 sleep() 应该以大写 S 开头,并且缺少“windows.h”标头,这样它才能工作。您还缺少 getline() 工作的“字符串”标头。
#包括
#包括
睡眠(int);
进行这些更改后,程序编译良好,创建了文件,并且我可以通过选择选项 2 来读取它。
不确定为什么它在您的特定情况下不起作用,但这可能与文件或创建该文件的文件夹的读取权限有关。
此外,您确实必须用 try catch 块包围所有这些逻辑(至少在 main 中)。如果出现任何异常,您可以选择将其打印到控制台并了解可能发生的情况。
我希望这有帮助。