我正在经历一个相当奇怪的事情。我目前正在研究一种计算形状形状因子的函数。周边和区域功能完全正常,但我发现了一些东西。
输出正确答案的代码
double Shapefactor (char line [50][50]){
double sfactor;
double perimeter1= (Perimeter(line));
printf("peri = %f", perimeter1);
double area1=((double)Area(line));
sfactor = ((perimeter1 * perimeter1) /area1);
printf("----------------------------------------------------*Therefore the shape factor for the given shape is* %f \n", sfactor);
return (sfactor);
}
这为我提供了正确的输出。但是,如果我要从代码
中删除此行printf("peri = %f", perimeter1);
然后它给了我错误的号码。你知道为什么会这样吗?
区号
int Area (char line [50][50]){
int x;
int y;
int sum;
for (x = 0; x <= 50; x++) {
for (y = 0; y <= 50; y++) {
if (line[x][y] == '1')
sum++;
}
}
return (sum);
}
周长
int Perimeter (char line [50][50]){
int x;
int y;
int sumup;
FILE * f_ptr;
char filename[20];
for (x = 0; x < 50; x++) {
for (y = 0; y < 50; y++) {
if (line[x][y + 1] == '0' & line[x][y] == '1')
sumup++;
else if (line[x][y] == '1' & line[x][y - 1] == '0')
sumup++;
else if (line[x + 1][y] == '0' & line[x][y] == '1')
sumup++;
else if (line[x][y] == '1' & line[x - 1][y] == '0')
sumup++;
}
}
return (sumup);
}
谢谢
答案 0 :(得分:3)
sum
中的变量Area()
(编辑:sumup
中的Perimeter()
,如@agbinfo所述)未初始化:
int Area (char line [50][50]){
//...
int sum;
for (x = 0; x <= 50; x++) {
for (y = 0; y <= 50; y++) {
if (line[x][y] == '1')
sum++;
//...
这是未定义的行为;这是一个自动变量,它很可能是你正在阅读的,前一个函数调用会在堆栈上留下垃圾,即你是否调用printf()
或者不会产生差异。重看。
我建议启用编译器警告和链接,这通常会捕获这些错误。