C 当我使用“时,程序会挂起”;删除“;功能
我正在尝试编写一个程序,它将从用户那里接收信息,用户可以选择做什么。选项包括添加、修改、删除、显示某些信息、查找平均值和退出。 我已经为它们编写了代码,但是我无法让我的delete函数工作。 这是我的密码:C 当我使用“时,程序会挂起”;删除“;功能,c,arrays,C,Arrays,我正在尝试编写一个程序,它将从用户那里接收信息,用户可以选择做什么。选项包括添加、修改、删除、显示某些信息、查找平均值和退出。 我已经为它们编写了代码,但是我无法让我的delete函数工作。 这是我的密码: void delete_student(struct students *list, int *count) //Delete's Selected student { int id4; int k; if (*count != 0)
void delete_student(struct students *list, int *count) //Delete's Selected student
{
int id4;
int k;
if (*count != 0)
{
printf("\nEnter the ID of the student you wish to delete: ");
scanf("%d\n", &id4);
for (int i = 0; i < *count; i++) //Searches for the selected student
{
k = i;
if (list[i].id == id4)
{
printf("\nStudent found.\nDeleting...\n");
for (int c = k; c < *count; c++) //Deletes the student if found
{
list[c].id = list[c + 1].id;
strcpy(list[c].name, list[c + 1].name);
list[c].age = list[c + 1].age;
strcpy(list[c].dept, list[c + 1].dept);
list[c].grade = list[c + 1].grade;
}
*count = *count - 1;
printf("\nDeletion Complete.\n");
break;
}
else
printf("\nStudent not found. Please try again.\n");
break;
}
}
else
printf("\nNo student's to delete.\n");
}
在
for
循环的末尾有一个break
语句,该语句可能不应该出现。删除那个
else
printf("\nStudent not found. Please try again.\n");
break;
} ^
|
+------ this one
那
printf
也有点不准确;在循环的每次迭代中,如果没有找到匹配的ID,它都会被打印出来。在for
循环的末尾有一个break
语句,该语句可能不应该出现。删除那个
else
printf("\nStudent not found. Please try again.\n");
break;
} ^
|
+------ this one
那
printf
也有点不准确;在循环的每次迭代中,如果没有找到匹配的ID,它都会被打印出来。在for
循环的末尾有一个break
语句,该语句可能不应该出现。删除那个
else
printf("\nStudent not found. Please try again.\n");
break;
} ^
|
+------ this one
那
printf
也有点不准确;在循环的每次迭代中,如果没有找到匹配的ID,它都会被打印出来。在for
循环的末尾有一个break
语句,该语句可能不应该出现。删除那个
else
printf("\nStudent not found. Please try again.\n");
break;
} ^
|
+------ this one
那printf
也有点不准确;在循环的每次迭代中,如果没有找到匹配的ID,它都会被打印出来。您的scanf()
语句的格式字符串不正确。您不需要添加尾随的换行符;scanf会处理好的。将该行更改为scanf(“%d”和&id4)代码>(无换行符),它应该可以工作。
我刚刚编写了一个小存根程序,用于比较有换行符和没有换行符的scanf,它会复制您的错误。您的scanf()
语句的格式字符串不正确。您不需要添加尾随的换行符;scanf会处理好的。将该行更改为scanf(“%d”和&id4)代码>(无换行符),它应该可以工作。
我刚刚编写了一个小存根程序,用于比较有换行符和没有换行符的scanf,它会复制您的错误。您的scanf()
语句的格式字符串不正确。您不需要添加尾随的换行符;scanf会处理好的。将该行更改为scanf(“%d”和&id4)代码>(无换行符),它应该可以工作。
我刚刚编写了一个小存根程序,用于比较有换行符和没有换行符的scanf,它会复制您的错误。您的scanf()
语句的格式字符串不正确。您不需要添加尾随的换行符;scanf会处理好的。将该行更改为scanf(“%d”和&id4)代码>(无换行符),它应该可以工作。
我刚刚编写了一个小存根程序,用于比较有换行符和没有换行符的scanf,它会复制您的错误。此循环:
for (int c = k; c < *count; c++)
for(int c=k;c<*count;c++)
应该是:
for (int c = k; c < *count - 1; c++)
for(int c=k;c<*count-1;c++)
如所写,它从有效数组的末尾读取一个。结果未定义。特别是,strcpy
调用可能会非常糟糕。当它到达该循环中的最后一个条目时,list[c+1]
引用一个不存在的条目(基于*计数)。此循环:
for (int c = k; c < *count; c++)
for(int c=k;c<*count;c++)
应该是:
for (int c = k; c < *count - 1; c++)
for(int c=k;c<*count-1;c++)
如所写,它从有效数组的末尾读取一个。结果未定义。特别是,strcpy
调用可能会非常糟糕。当它到达该循环中的最后一个条目时,list[c+1]
引用一个不存在的条目(基于*计数)。此循环:
for (int c = k; c < *count; c++)
for(int c=k;c<*count;c++)
应该是:
for (int c = k; c < *count - 1; c++)
for(int c=k;c<*count-1;c++)
如所写,它从有效数组的末尾读取一个。结果未定义。特别是,strcpy
调用可能会非常糟糕。当它到达该循环中的最后一个条目时,list[c+1]
引用一个不存在的条目(基于*计数)。此循环:
for (int c = k; c < *count; c++)
for(int c=k;c<*count;c++)
应该是:
for (int c = k; c < *count - 1; c++)
for(int c=k;c<*count-1;c++)
如所写,它从有效数组的末尾读取一个。结果未定义。特别是,strcpy
调用可能会非常糟糕。当它到达循环中的最后一个条目时,list[c+1]
引用一个不存在的条目(基于*计数)。您的scanf
将挂起,因为它永远无法读取您的号码。不需要\n
。仅使用%d
。您的scanf
将挂起,因为它无法读取您的号码。不需要\n
。仅使用%d
。您的scanf
将挂起,因为它无法读取您的号码。不需要\n
。仅使用%d
。您的scanf
将挂起,因为它无法读取您的号码。不需要\n
。仅使用%d
。请澄清这不起作用的原因。您是否遇到编译器错误?运行时出现分段错误?代码运行了吗,但没有按应有的方式运行?@ZachStark当我浏览程序,选择使用此函数时,它会要求我输入“ID”,然后它什么也不做,并且有一个闪烁的光标。请澄清为什么这不起作用。您是否遇到编译器错误?运行时出现分段错误?代码运行了吗,但没有按应有的方式运行?@ZachStark当我浏览程序,选择使用此函数时,它会要求我输入“ID”,然后它什么也不做,并且有一个闪烁的光标。请澄清为什么这不起作用。您是否遇到编译器错误?运行时出现分段错误?代码是否运行,但不按其本身的方式运行