我的代码中的输出函数需要写在哪里?

问题描述 投票:0回答:1

对于一项任务,我得到了一个包含整数的文本文件。每行可以有不同数量的整数,但不能超过 30 个。文件中的所有整数均以空格分隔。我需要编写代码,根据每行的第一个元素对每一行进行排序,并将结果放入输出文件中。如果第一个元素是正值,则该行的元素必须按降序排序。如果它是负值 - 按升序排列。如果该行以

0
开头,那么它必须保持不变,而不改变顺序。

我正在使用冒泡排序方法来完成此任务,但我无法弄清楚在代码中的输出函数中到底要写入哪里...此方法假设将进行几次迭代,直到所有元素的顺序都是正确的。我怎样才能理解这个时刻何时到来?我应该在代码中添加 bool 函数还是其他函数?或者也许这比我想象的要容易得多?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    FILE *input = fopen("int_numbers.txt", "r");
    if (input == NULL) {
        printf("An error occurred");
        return 1;
    }

    FILE *output = fopen("result.txt", "w");
    if (output == NULL) {
        printf("An error occurred");
        return 2;
    }

    char line[300];
    while (fgets(line, sizeof(line), input) != NULL) {
        int num = sizeof(line) / sizeof(line[0]);

        // sorting in descending order 
        if (line[0] > 0) {
            for (int i = 0, i < num - 1, i++) {
                for (int j = 0; j < num - i - 1, j++) {
                    if (line[j] < line[j + 1]) {
                        int tmp = line[j];
                        line[j] = line[j + 1];
                        line[j + 1] = tmp;
                    }
                }
            } 
        } 

        // sorting in ascending order
        if (line[0] < 0) {
            for (int i = 0, i < num - 1, i++) {
                for (int j = 0; j < num - i - 1, j++) {
                    if (line[j] > line[j + 1]) {
                        int tmp = line[j + 1];
                        line[j + 1] = line[j];
                        line[j] = tmp;
                    }
                }
            } 
        }

        // no changes in order required
        if (line[0] == 0) {
            for (int i = 0; i < num, i++) {
                fputs(line[i], output);
            }
        }
    }

    fclose(input);
    fclose(output);

    return 0;
}
c file bubble-sort
1个回答
0
投票

您的代码无法按照问题中公开的那样工作:您不是对 nunbers 进行排序,而是对行中的字符进行排序。

您应该将该行解析为一个由

int
组成的数组,最多有 30 个,然后按所需顺序对数组进行排序,然后使用
printf
将排序后的数字输出到输出文件中。目前尚不清楚是否应该复制以
0
开头的行或从数组中重写它们。这会对
-0
00
01
...等数字产生影响,并且还可能改变间距。

© www.soinside.com 2019 - 2024. All rights reserved.