我正在尝试使用给定参数的FrequencyTable。
完整代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
double newTable[argc*1][0];
int newTableCounter = 0;
int counter = 0;
double min = 999999999.9;
double max = -9999999999999999.9;
int tableLength = argc;
double temp = 0.0;
int counter2 = 0;
int isListed = 0;
counter = 1;
/* Min & Max */
while (counter != tableLength) {
temp = atof(argv[counter]);
if (temp > max) {
max = temp;
}
if (temp < min) {
min = temp;
}
counter++;
}
printf("Pienin arvo: %f\n", min);
printf("Suurin arvo: %f\n", max);
/* FrequencyTabeling */
for (int i = 0; i < argc; i++) {
temp = atof(argv[i]);
isListed = 0;
if (newTableCounter == 0) {
newTable[newTableCounter][0] = temp;
newTableCounter++;
isListed = 1;
}
else {
for (int i2 = 0; i2 <= newTableCounter; i2++) {
if (temp == newTable[i2][0]) {
newTable[i2][1]++;
isListed = 1;
break;
}
}
}
if (isListed == 0) {
printf(" In newTable addition\n");
printf(" newTableCounter: %d\n", newTableCounter);
newTable[newTableCounter][0] = temp;
newTableCounter++;
}
printf("isListed = %d \n", isListed);
printf("Temp = %f", temp);
}
/* FrequencyTable Print */
for (int i = 0; i < newTableCounter; i++) {
printf("%d, %f\n", i, newTable[i][0]);
}
return 0;
}
但是,表的第一个维度默认为给定的最后一个值; 当以“a 1 2 3”运行时,每个值都为3。
我是C的新手,之前刚刚完成了几年的Java + Python,所以请原谅我这里可能非常初学的问题。
答案 0 :(得分:1)
使用
double newTable[argc*1][0];
您创建了一个包含argc
元素的数组(与1
的乘法无关),每个元素依次为 零 double
类型的元素。
拥有一个零元素数组是没有意义的,并且C标准确实不允许这样做。如果您的编译器允许它作为扩展,那么所有索引到这样的数组将是超出范围并将导致undefined behavior。
请记住,用于声明数组的值是 size (元素数),而不是top-index。因此,要创建一个元素的数组(没有意义),请使用值1
,如
double newTable[argc][1];
在这种情况下,第二个&#34;尺寸&#34;可以跳过,你会有
double newTable[argc];