c - Switch Case 在 C 中由自身触发
问题描述
我有一个文件 student.txt 它的内容像
Name RollNo Address ...\n
Name RollNo Address ...\n
我已经编写了一个函数来在它的菜单驱动的文件中搜索名称,就像
std student;
FILE *file = NULL;
int choice;
char name[20];
while (1)
{
printf("Enter the choice\n1.Insert\t2.Append\t3.Search\t4.Display: ");
scanf("%d", &choice);
switch (choice)
{
case 1:
//insertion
break;
case 2:
// append
break;
case 3:
printf("Enter the student name to be searched: ");
scanf("%d", &name);
search(name, &file);
break;
case 4:
// display
break;
default:
exit(0);
break;
}
}
return 0;
搜索功能是
void search(char ele[], FILE **fileptr)
{
*fileptr = freopen("student.txt", "r", *fileptr);
char line[100];
while (fgets(line, 100, *fileptr) != NULL)
{
if (strstr(line, ele) != NULL)
{
getchar();
printf("Congrats !!\n");
return;
}
}
printf("not found\n");
fclose(*fileptr);
}
但是当我运行它时,虽然文件名与文件名匹配,但它会进入无限循环并执行显示功能并无限触发搜索功能本身
解决方案
当没有使用正确的格式说明符正确接收数据时,就会发生这种情况。
在case 3
, 在scanf
函数中,使用格式说明符
%s
代替
%d
这将停止无限循环。
推荐阅读
- regex-lookarounds - 带有perl正则表达式贪婪的linux grep不起作用
- pandas - 根据阈值过滤熊猫中的行
- c# - 无法添加用户控件“加载工具箱项失败”C#winforms
- hibernate - JPA+H2:应用程序必须提供 JDBC 连接
- firebase - Chrome 69 不支持 Firebase SDK
- asp.net-mvc - 如何在 chrome 中调试 _Layout.cshtml
- css - 无法在 PhpStorm 中运行 File Watcher 'Sass'
- c# - HangerFire 在删除失败作业时在生产服务器中显示 404 错误
- r - 无法安装 sp 软件包二进制文件?
- vba - 根据其中的值选择销售的 VBA 代码