我正在尝试排序* 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中的排序测试,这是正确完成的,因为我相信我的问题是指针工作或调用函数。
有谁知道为什么排序会插入随机数?
答案 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()