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

时间:2018-05-03 20:15:40

标签: c++ printf

我正在经历一个相当奇怪的事情。我目前正在研究一种计算形状形状因子的函数。周边和区域功能完全正常,但我发现了一些东西。

输出正确答案的代码

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

  }

谢谢

1 个答案:

答案 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()或者不会产生差异。重看。

我建议启用编译器警告和链接,这通常会捕获这些错误。