排序argv插入随机数

时间:2018-02-16 16:38:13

标签: c sorting

我正在尝试排序* argv [],当我尝试显示排序结果时,我会得到随机数字。

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

void sortIntegers(int value[], int length);
int convertToInt(char *string);
int *sortArguments(int argc, char *argv[]);

int main() {

    int i;
    int value[9] = {0, 234, 345345, 91, -3, 12, 3, 19, 17};
    char *argv[9] = {"0", "234", "345345", "91", "-3", "12", "3", "19", "17"};
    int argc = 9;
    int *result;

    printf("\n");

/* order before sorting */
    printf("Before: ");
    for(i = 0; i < 9; i++){
        printf("%d ", value[i]);
    } 
/* end or sorting proof */

/* converting char sting to integers and sorting */
    result =sortArguments(argc, argv);
    printf("\nAfter: ");
    for (i = 0; i < argc; i++) {
        printf("%d, ", result[i]);
    }
    printf("\n");
/* end of sorting and conversion */

/* this is to prove my sort algorith works */
    sortIntegers(value, 9);
    printf("Desired Results: ");
    for(i = 0; i < 9; i++){
        printf("%d ", value[i]);
    }
    printf("\n\n");
/* end or sorting proof */

    free(result);
    return 0;
}

 void sortIntegers(int value[], int length) {     

    int i;
    int x;
    int temp;

    for(x = 0; x < (length - 1); x++)
    {
        for(i = 0; i < (length - x -1); i++)
        {
            if(value[i] > value[i+1])
            {
                temp = value[i];
                value[i] = value[i + 1];
                value[i + 1] = temp;
            }
        }
    }
}
int convertToInt(const char *string) {
    char stringToNum;

    stringToNum = atoi(string);

    return stringToNum;
}
int *sortArguments(int argc, char *argv[]) {

    int *list = malloc(sizeof(int) * (argc));
    int i;    

    for (i = 0; i < argc; i++) 
    {    
        list[i] = convertToInt(argv[i]);
    }
    sortIntegers(list, (argc));

    return list;
}

我查看了问题Bubble sorting random numbers,我相信我没有犯这个错误。

这是我的程序的输出: Before: 0 234 345345 91 -3 12 3 19 17 After: -22, -3, 0, 1, 3, 12, 17, 19, Desired Results: -3 0 3 12 17 19 91 234 345345

before语句来自我的main中的排序测试,这是正确完成的,因为我相信我的问题是指针工作或调用函数。

有谁知道为什么排序会插入随机数?

1 个答案:

答案 0 :(得分:1)

请勿在{{1​​}}中使用char,请使用convertToInt

int

甚至更好

int convertToInt(char *string) {
    int stringToNum;

    stringToNum = atoi(string);

    return stringToNum;
}

甚至更好,一起摆脱函数调用并直接在int convertToInt(char *string) { return atoi(string); } 中使用atoi()(正如迈克尔所建议的那样)

sortArguments()