【发布时间】:2021-02-06 09:25:45
【问题描述】:
此代码将从用户那里获取数组的元素,然后对其进行排序。用户输入限制为 20。如果我在此处使用 break,则特定行 if (a[i]==0)break; 存在问题,结果显示垃圾值。否则,它可以正常工作,但我希望用户能够使用 20 个或更少的数字运行程序。我的意思是,只要他们觉得完成了,他们就可以简单地输入 0,这样循环就会中断。我在下面给出代码。请尝试给出简单的解决方案,不要有毒和傲慢。谢谢。
//Sorting with user input array elements
void print(float a[], int n)
{
for (int i = 0; i < n; i++) {
cout << a[i] << " ";
}
}
void sort(float a[], int n)
{
for (int i = 1; i < n; i++) {
for (int j = 0; j < n - i; j++) {
if (a[j] > a[j + 1]) {
swap(a[j], a[j + 1]);
}
}
}
}
int main()
{
float a[20];
int size;
court << "Enter Floats and terminate with 0 (Highest limit is 20)" << endl;
for (int i = 0; i <= 20; i++) {
cout << "a[" << i << "] : ";
cin >> a[i];
if (a[i] == 0)
break;
}
size = sizeof(a) / sizeof(int);
cout << "\nGiven Values :: ";
print(a, size);
cout << endl;
sort(a, size);
cout << "Sorted Result :: ";
print(a, size);
}
【问题讨论】:
-
数组大小为 20。用户设置值直到输入 0。这意味着其他元素未初始化。这些是垃圾值。您可以通过保存输入元素的数量来修复它。
-
如何保存输入元素的数量?我的意思是我已经使用“大小”来确定用户输入后的大小。
-
循环一直持续到
i == 20。这意味着(除非用户在此之前输入零值)将在数组末尾读取一个值。结果是未定义的行为。 -
数组的大小是固定的。它没有改变。
sizeof(a) / sizeof(int);将始终返回20。 -
“拜托,...不要有毒和傲慢”——拜托,不要写这个,它不属于这个问题,它有点像对绝大多数读者不礼貌。