Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 当我使用“时,程序会挂起”;删除“;功能_C_Arrays - Fatal编程技术网

C 当我使用“时,程序会挂起”;删除“;功能

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)

我正在尝试编写一个程序,它将从用户那里接收信息,用户可以选择做什么。选项包括添加、修改、删除、显示某些信息、查找平均值和退出。 我已经为它们编写了代码,但是我无法让我的delete函数工作。 这是我的密码:

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”,然后它什么也不做,并且有一个闪烁的光标。请澄清为什么这不起作用。您是否遇到编译器错误?运行时出现分段错误?代码是否运行,但不按其本身的方式运行