程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 學點C語言(17):數據類型 - 因類型引發的問題或錯誤

學點C語言(17):數據類型 - 因類型引發的問題或錯誤

編輯:關於C語言

1. 運算結果超出類型大小:

#include <stdio.h>
#include <limits.h>

int main(void)
{
  short s1 = SHRT_MAX;
  short s2 = SHRT_MAX;
  short num1;
  int num2;

  /* 不會是期望的值 */
  num1 = s1 + s2;
  printf("%d\n",num1);

  /* 這樣可以了 */
  num2 = s1 + s2;
  printf("%d\n",num2);

  getchar();
  return 0;
}

2. 把大的賦給小的:

#include <stdio.h>
#include <limits.h>

int main(void)
{
  unsigned int n1=INT_MAX;
   unsigned char n2;
  unsigned short n3;

  n2 = n1;
  n3 = n1;

  printf("%u,%u,%u\n",n1,n2,n3);
  printf("%#X,%#X,%#X\n\n",n1,n2,n3);

  n1 = LLONG_MAX;
  printf("%lld,%u\n",LLONG_MAX,n1);
  printf("%#llx,%#x\n",LLONG_MAX,n1);

  getchar();
  return 0;
}

3. 把浮點數賦給整數:

#include <stdio.h>

int main(void)
{
  double pi = 3.14159265;
  int i;

  /* 只會留下整數部分 */
  i = pi;
  printf("%d\n",i);

  /* 並且不會四捨五入 */
  i = 3.6;
  printf("%d\n",i);

  getchar();
  return 0;
}

4. 兩個整數相除只返回整數:

#include <stdio.h>

int main(void)
{
  int n1 = 3;
  int n2 = 2;
  float f;

  /* 這樣不行; 但如果你本來就只想要整數部分,那不正中下懷嗎? */
   f = 3 / 2;
  printf("%g\n",f);

  /* 這樣才可以(如果只有兩個運算數,其中一個是浮點數即可,但多了不行) */
   f = 3.0 / 2.0;
  printf("%g\n",f);

  /* 這樣不行 */
  f = n1 / n2;
  printf("%g\n",f);

  /* 這樣也不行 */
  f = (float)(n1 / n2);
  printf("%g\n",f);

  /* 這樣才可以 */
  f = (float)(n1) / (float)(n2);
  printf("%g\n",f);

  getchar();
  return 0;
}

返回“學點C語言 - 目錄”

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved