【发布时间】:2015-10-11 22:16:03
【问题描述】:
这个程序应该对从命令行输入的数字进行排序,如 -a 用于从小到大排序,或 -d 用于从大到小排序。我之前编译了这个程序,运行它并且输出很好。后来我在我的笔记本电脑上测试了它,然后排序都不能正常工作。
我输入了 ./sort -a 5 14 10 18 20 2 100 6 7 1
结果:-1950355064 2 5 6 10 14 18 20 100
我输入了:./sort -d 5 14 10 18 20 2 100 6 7 1
结果:761262572 32767 18 14 10 6 20 5 100 2
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10
// function declarations
void small_to_large(int a[], int n);
void large_to_small(int a[], int n);
int main(int argc, char *argv[])
{
int i;
char letter_d[3] = "-d"; // find "-d" in function
char letter_a[3] = "-a"; // find "-a" in function
int arg_d;
int arg_a;
char *find_letter = argv[1];
int stringToInt[N+1];
for( i = 0; i < argc; i++){
printf("%s ", argv[i]);
}
printf("\n");
arg_d = strcmp(find_letter, letter_d);
arg_a = strcmp(find_letter, letter_a);
if (arg_d == 0) {
printf("descend!\n");
for(i = 2; i<argc; i++) {
stringToInt[i] = atoi(argv[i]);
}
large_to_small(stringToInt, N);
for(i = 0; i < N; i++) {
printf(" %d", stringToInt[i]);
}
}
else if (arg_a == 0) {
printf("ascend!\n");
for(i = 2; i < argc; i++) {
stringToInt[i] = atoi(argv[i]);
}
small_to_large(stringToInt, N);
for(i = 0; i < N; i++) {
printf(" %d", stringToInt[i]);
}
}
else {
printf("Invalid command: %s\n", find_letter);
}
printf("\n");
return 0;
}
// small_to_large function
void small_to_large(int a[], int n)
{
int i, largest = 0, temp;
if (n == 1)
return;
for (i = 1; i < n; i++)
if (a[i] > a[largest])
largest = i;
if (largest < n - 1) {
temp = a[n-1];
a[n-1] = a[largest];
a[largest] = temp;
}
small_to_large(a, n - 1);
}
// large_to_small function
void large_to_small(int a[], int n)
{
int i, largest = 0, temp;
if(n == 1)
return;
for (i = n; i >= 2; i--)
if(a[i] < a[largest])
largest = i;
if (largest < n - 1) {
temp = a[n-1];
a[n-1] = a[largest];
a[largest] = temp;
}
large_to_small(a, n-1);
}
【问题讨论】:
-
当您发现该程序无法运行时,您会怎么做?我建议您启动您最喜欢的调试器并尝试找出问题所在。当您在不同时间获得不同的行为时,通常表明您的代码中存在导致未定义行为的错误(通常是内存损坏)。
-
0)
stringToInt[i] = atoi(argv[i]);:stringToInt的索引应该从0开始。
标签: c string sorting command-line atoi