【问题标题】:sorting and printing elements of array prints out garbage排序和打印数组元素打印出垃圾
【发布时间】:2017-11-28 17:21:29
【问题描述】:

嗨,有人可以帮我解决我的代码中的逻辑错误,我想通过数组打印出一些浮点数,但是当我输入数字时,它会打印出垃圾和 0.000000 或其他。

这是我的代码,我定义了 SIZE 4 只是为了让它更容易:

int main(){
double array1[SIZE];

printf("\n Enter the elements of Array 1: ");
get_value(array1);
printf("\n\n Elements of Array 1: ");
print_value(array1, SIZE);
}

然后是我的函数

void get_value(double arr[]){
int i, j;
for (i = 0; i < SIZE; i++){
    j = i + 1;
    printf("\n Enter element %d: ", j);
    scanf("%f", &arr[i]);
}


void print_value(double arr[], int n){
int i;
printf("{ ");
for (i = 0; i < n; i++){
    printf("%f ", arr[i]);
}
printf("}");

void function_sort(double arr[] = {0}){
int i, j, temp, swapping;
for (i = 1; i < SIZE; i++){
    swapping = 0;
    for (j = 0; j < SIZE - i; j++){
        if (arr[j] > arr[j + 1]){
            temp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = temp;
            swapping = 1;
        }
    }
    if (swapping == 0){
        break;
    }
}

}

输出是这样的:

 Enter the elements of Array 1:


Enter element 1: 1.5

 Enter element 2: 2.5

 Enter element 3: 3.25

 Enter element 4: 2.25


 Elements of Array 1: { 0.000000 0.000000 0.000000 321179424811157990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000 }
Sorted elements of Array 1: { 0.000000 0.000000 0.000000 321179424811157990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000 }

【问题讨论】:

  • 老实说,这是一个可怕的缩进和格式
  • 你在哪里打电话给function_sort
  • @potato 对不起,我是新手
  • @babon 好吧,这真的没关系,但它在我的主要元素和元素之后。

标签: c arrays


【解决方案1】:

scanf("%lf", &amp;arr[i]); 使用正确的格式说明符,否则会出错。(强制 - %f 会导致错误扫描输入)。

也用于打印结果将是printf("%lf",arr[i])。 (非强制性 -%f 也可以)。

冒泡排序代码:-

int flag = 1;
for (size_t i = n - 1; flag && i >= 0; i--){
  flag = 0;
  for (size_t j = 0; j < i; j++){
    if (a[j] > a[j + 1]) {
      int temp = a[j];
      a[j] = a[j + 1];
      a[j + 1] = temp;
      flag = 1;
    }
  }
}

Vlad 在这里的评论是针对此代码Rosetta Code for Bubble sort 的回复。现在代码有一些错误,它在内部循环中重复进行比较。数组未按应有的方式划分为已排序部分和未排序部分。

【讨论】:

  • 这是我见过的最差的冒泡排序代码。
  • 对于初学者来说,数组的大小应该是 size_t 类型。变量应在使用它们的范围内声明。标识符“s”的选择不清楚。内循环遍历所有元素
  • 我不知道罗塞塔是谁。但很明显,他无法写出好的代码。他演示了不应该如何编写代码。
  • 您显示的代码不是冒泡排序。很抱歉,这个问题对我来说并不有趣。
  • 谢谢你解决了我的问题并教会了我一些很酷的东西,我真的很感激。
猜你喜欢
  • 1970-01-01
  • 2017-03-14
  • 2022-01-03
  • 2015-06-28
  • 2017-07-21
  • 2020-01-13
  • 1970-01-01
  • 2020-08-22
  • 1970-01-01
相关资源
最近更新 更多