【发布时间】:2021-09-07 08:58:50
【问题描述】:
struct Student
{
char* name;
int balls;
};
void inputdata(Student **s, int *n)
{
int nn;
printf("%s\n", "Input amount of students");
scanf("%i", &nn);
Student* a = new Student[nn];
for (int i = 0; i < nn; ++i)
{
a[i].name = new char[4096];
scanf("%4095s", a[i].name);
scanf("%i", &a[i].balls);
}
*n = nn;
*s = a;
}
void print(Student *s, int n)
{
for (int i = 0; i < n; ++i)
{
printf("%s %i\n", s[i].name, s[i].balls);
}
}
void fixdata(Student *s, int *n)
{
int nn = *n;
for (int i = 0; i < nn; ++i)
{
if (s[i].balls > 100)
s[i].balls = 100;
else if (s[i].balls < 20)
{
for(int j = i; j < nn; ++j)
s[j] = s[j+1];
nn-=1;
}
}
*n = nn;
}
int main(int argc, char const *argv[])
{
Student* s;
int n;
inputdata(&s, &n);
print(s, n);
fixdata(s, &n);
print(s, n);
return 0;
}
我正在尝试删除 balls 小于 20 的项目。如果是这样,我应该将项目向右移动,但同时删除小于 20 的项目。我尝试了,但它彻底向左移动 2 条相同的记录并且没有正确完成工作。
更新: 好的,我清理了一下代码,现在n 减少了,但是当它停留在 1 条记录时的问题,应该也被删除了。我想知道为什么它没有被删除。谢天谢地,大部分问题都解决了。不过,当剩下的一项少于 20 时,删除一项有什么问题?
【问题讨论】:
-
当一个元素被移除时,你必须改变数组中元素的数量。
-
int balls;- 您可能需要重新考虑这个变量名。你是说score还是mark? -
旁注:这段代码非常繁重。我看不出在为 C++ 编译时会有什么不同,但你应该检查你的参考资料,也许在你进入行业之前获得一些专门针对 C++ 及其习语的资料,以便更顺利地进入劳动力市场。跨度>
-
更严肃的一点是,除非您正在处理家庭作业的需求,否则您不应该使用
char*来存储运行时字符串。使用std::string。您的自制阵列也是如此。另外,考虑使用 C++ 流 IO(std::cin、std::cout)而不是 C 风格的prrintf和scanf。 -
prrintf太棒了!
标签: c++ arrays for-loop dynamic-memory-allocation function-definition