c 编程遇到的小问题(初学时)

此演示以Dev-Cpp++5.11为主,现在上代码


#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{ long long n;
  long long a1,b1;
  long long sb,sa=n;
  long long ma,mb=0;
  int m; 
 
  scanf("%lld",&n);
  scanf("%d",&m);
  printf("%lld\n",ma);
  printf("%lld\n",mb);
  printf("%lld\n",sa);
  printf("%lld\n",sb);
  for(long long i=0;i<=m-1;i++){    
     scanf("%lld",&a1);
     scanf("%lld",&b1);
     if(a1>ma){
       ma=a1;     
     }
     if(b1>mb){
       mb=b1;
     }
     if(a1<sa){
       sa=a1;
     }
     if(b1<sb){
       sb=b1;
     }
  }
  printf("%lld\n",ma);
  printf("%lld\n",mb);
  printf("%lld\n",sa);
  printf("%lld\n",sb);
  if((ma-sa)>=(mb-sb)){
    long long p=ma-sa+1;
    printf("%lld",p);
   
  }
  
  else{
    long long s=mb-sb+1;
    printf("%lld",s);
    
  }
  // ?????????
  return 0;
}

我们以为这编译器编的有问题

现在运行下面代码

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{ long long n;
  long long a1,b1;
  long long sb,sa=n;
  long long ma,mb=0;
  int m; 
 
  scanf("%lld",&n);
  scanf("%d",&m);
 
  for(long long i=0;i<=m-1;i++){    
     scanf("%lld",&a1);
     scanf("%lld",&b1);
     if(a1>ma){
       ma=a1;     
     }
     if(b1>mb){
       mb=b1;
     }
     if(a1<sa){
       sa=a1;
     }
     if(b1<sb){
       sb=b1;
     }
  }

  if((ma-sa)>=(mb-sb)){
    long long p=ma-sa+1;
    printf("%lld",p);
   
  }
  
  else{
    long long s=mb-sb+1;
    printf("%lld",s);
    
  }
  // ?????????
  return 0;
}
结果是

我们就以为这编译器编的有问题​当然可能卡住了,但就算没卡也是无法得到结果的,正确输出应如下图。

真是抱歉,当时知识不足,发了错误的知识,是由误人子弟之感啊。。。那么接下来讲解一下上面所述的问题。

1

long long a1,b1=0;意思是使b1=0,a1没有赋值,但占了内存

2

int main(int argc, char *argv[]){

  long long n;
  long long sb,sa=n;
  scanf("%lld",&n);

  printf("%d",sa);

  return 0;

}  

这里输出的sa不能得到scanf中得到的值,只是占了一定内存,定义了这么一个声明,但没有赋值。当您用了我上面的代码,就会发现输出为0这个随机值,这个由编译器决定。


  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值