gpt4 book ai didi

如果 Printf 在函数中,则 C++ Return 不同

转载 作者:行者123 更新时间:2023-11-27 23:46:30 25 4
gpt4 key购买 nike

我正在经历一件相当奇怪的事情。我目前正在研究计算形状的形状因子的函数。周长和面积函数工作得很好,但我发现了一些东西。

给出正确答案的代码

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);

}

谢谢

最佳答案

Area() 中的变量 sum(编辑:以及 Perimeter() 中的 sumup,如@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() 会影响您所看到的情况。

我建议启用通常会捕获此类错误的编译器警告和 linter。

关于如果 Printf 在函数中,则 C++ Return 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50163202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com