以下程序是查找数组中的第一个和第二个最大元素
INPUT: 5 10 11 23
//To find max and second max element in an array
#include < stdio.h >
#include < stdlib.h >
int main(int argc, char * argv[]) {
int l, arr[100], n;
int first = arr[0];
int second = arr[0];
int i;
for (i = 0; i <= n; i++) {
arr[i] = atoi(argv[i]);
}
for (i = 0; i < 10; i++) {
if (first < arr[i]) {
second = first;
first = arr[i];
} else if (second < arr[i]) {
second = arr[i];
}
}
printf("First = %d\n", first);
printf("Second = %d\n", second);
return 0;
}
输出:
首先= 242475432
第二名= 242425128
有垃圾值但没有排序值
答案 0 :(得分:3)
代码的行为是未定义。在将其设置为值之前,您正在阅读arr[0]
。
n
永远不会被初始化;更多未定义的行为。为什么不将其设置为argc
,并确保您将i
投放到< argc
?另外,不要忘记argv[1]
是命令行中的第一个参数:考虑从1开始运行i
。
一个好的逐行调试器有助于识别这些问题。
答案 1 :(得分:1)
要从命令行加载数组,我建议:
int main(int argc, char * argv[]) {
int l, arr[100];
for (int i = 1; i < argc; i++) {
arr[i-1] = atoi(argv[i]);
}
int n= argc - 1;
int first = arr[0];
int second = arr[0];
答案 2 :(得分:0)