c - 不明白什么是 fflush() 函数
问题描述
我似乎无法理解fflush()
C 中函数的概念。有人可以用更简单的术语解释一下吗,因为我似乎无法理解它以及它在这段代码中的作用:
int main() {
loadContactList();
while (1) {
printf("\n");
printMenu();
int choice;
scanf(" %d", &choice);
fflush(stdin);
printf("\n");
if (choice == 1) {
// addContact();
} else if (choice == 2) {
} else if (choice == 3) {
} else if (choice == 4) {
query();
} else if (choice == 5) {
while (1) {
printf("choose the sorting mode:\n \n");
printf("1. Sort by last name, first name then number\n");
printf("2. Sort by date\n");
printf("Enter -1 to return to the main menu\n");
int x;
scanf("%d", &x);
if (x == 1) {
sortByLFN();
printContactList();
break;
} else if (x == 2) {
sortByDate();
printContactList();
break;
} else if (x == -1) {
break;
}
}
} else if (choice == 6) {
//saveContact();
} else if (choice == 7) {
quitPhoneBook();
} else {
printf("You entered an invalid option \n");
}
}
return 0;
}
该代码应该用于电话簿程序,我们被告知要使用fflush
但在课堂上没有解释。
解决方案
刷新输出流(例如stdout
)会导致任何缓冲数据“刷新”到输出。例如,刷新stdout
通常用于确保输出变得可见,即使它后面没有换行符,因为它stdout
可能是行缓冲的。
刷新输入流(例如stdin
)在标准 C 中是未定义的行为,不应使用。一些实现确实将其定义为非标准扩展以清除任何未读输入,但我强烈建议不要利用它(特别是作为不当使用 的解决方法scanf
)。问题中的代码属于这一类。
推荐阅读
- git - 获取 ssh git@github.com:权限被拒绝(公钥)
- laravel - Laravel 验证器总是失败
- arduino - 我如何在 Arduino 中进行协作?
- python - 如何使用 twilio-python 处理拨号状态
- python - 使用 Python 将 Firewall Syslog Entires 中的结构化字符串数据解析为 dict
- python - 使用标签和索引在熊猫数据框中设置值,现在不推荐使用 ix
- java - 我在 java 邮件 API 的身份验证过程中遇到错误
- php - PHP x86 内存限制
- c# - 多个表的 SQL SUM
- gitlab - GitLab CI/CD - LAMP 项目的设置