c - 使我的函数防崩溃会导致分段错误:11
问题描述
我正在制作一个程序,将有关车辆的信息保存在由结构组成的数组中,然后将其打印到文件中。程序中包括添加和删除车辆以及打印保存的车辆和删除车辆的选项。选择要删除或打印的车辆时,我必须确保用户的输入是整数以防止其崩溃,如果不是整数,则给出自定义错误消息并给用户另一个输入机会. 我尝试了几种不同的方法,最新的方法似乎很有希望,但是在运行这些函数时,无论我输入整数还是字符,我都会得到“分段错误:11”。
如果没有应该防止崩溃的代码行,这些功能似乎可以正常工作。有人可以告诉我是什么导致了错误或可能的问题解决方法。谢谢!
这些是导致问题的功能:
移除车辆的函数:该函数接受结构数组以及计算数组中占用点数的 int 计数器。然后,该函数以 int 的形式从用户那里获取输入,以选择要删除的位置。位置不能大于 counter 或小于 0。
//Ta bort ett fordon
void del(int counter, fordon_t reg[])
{
int pos;
int i;
do{
printf("Vilken position ska tas bort?:");
char *tmp;
scanf("%s", tmp);
pos = atoi(tmp);
if (pos == 0)
{
printf("Var god och skriv en siffra\n");
}
}
while(pos == 0);
if(pos<0 || pos>=counter)
{
printf("Ogiltig position\n");
}
else
{
for(i=pos+1; i<counter; i++)
{
reg[i-1]=reg[i];
}
counter--;
for(i=0; i<counter; i++)
{
printf("%s %d %s %s %s\n", reg[i].owner.name, reg[i].owner.age, reg[i].type, reg[i].brand, reg[i].regnum);
}
}
}
打印所选车辆的功能:此功能的工作方式与前一个功能相同,但不是删除所选位置,而是打印该位置的信息。
//Skriv ut specifikt fordon
void print_out(int counter, fordon_t reg[])
{
int val;
do
{
char *tmp;
printf("Vilken postition vill du se?:");
scanf("%s", tmp);
val = atoi(tmp);
if (val == 0)
{
printf("Var god och skriv en siffra\n");
}
}
while(val == 0);
if(val<0 || val>=counter)
{
printf("Ogiltig position\n");
}
else
{
printf("%s %d %s %s %s\n", reg[val].owner.name, reg[val].owner.age, reg[val].type, reg[val].brand, reg[val].regnum);
}
}
如果需要有关我的程序的其他信息来解决该程序,请告诉我,我将提供更多代码。
解决方案
推荐阅读
- box-api - 我如何在 Box 中签署文档,我对电子签名感兴趣?
- phpunit - 我得到了未定义的索引:livewire 测试中的指纹
- python - Python对熊猫数据框中列表中的元素进行排序
- c - 全局定义的变量作为函数返回
- javascript - Onclick 事件创建具有锁定大小的元素
- forms - 使用 Adobe ColdFusion 将下拉列表中的选定选项传递到变量中
- python - Dask 警告提供明确的输出类型
- amazon-web-services - 创建/删除 s3 存储桶(对象)时,有什么方法可以发送警报吗?
- python - Pandas 读取 csv,列名分布在多行中
- javascript - 如何在js中显示来自json的对象