首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言學號存儲選擇:字元陣列 vs 長整型 —— 非數值型標識符應用字串

     編輯:程式設計疑難解答

直接結論

學號、身份證號、手機號、銀行卡號等「標識符」類數據,必須使用字元陣列/字串存儲,不可用數值型別 (int/long/double)。

核心理由

維度數值型別 (long)字串型別 (char[]/String)
數學運算支援 + - * /不支援 (無意義)
前導零自動丟失 (00123 → 123)完整保留
長度限制long 僅 19 位 (含符號位)無理論上限
業務操作無四則運算需求支援模糊查詢、截取、比對、正則驗證
國際化無法儲存字母/特殊符號完美支援

具體場景分析

  • 學號:如 20210001、CS2021001 含字母,長度常超 10 位,需模糊查詢 (按年級、專業)。
  • 身份證:18 位,末位可能為 X,**長整型無法儲存 X**,且需按地址碼、出生日期解析。
  • 手機號:11 位,常按前綴 (138、139) 查詢歸屬地。

代碼示範

// ✅ 正確
char studentId[20];
scanf("%19s", studentId); // 限制長度防溢出
printf("學號: %s\n", studentId);

// ❌ 錯誤
long studentId;
scanf("%ld", &studentId); // 輸入 202100012345 超出 long 範圍或丟失前導零

擴展:其他「非數值」數據同理

  • 郵政編碼 (含字母如 UK)、車牌號、ISBN、UUID、密碼雜湊值。
  • 原則:**不參與加減乘除的「數字」,統統用字串。**
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved