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

C++ char輸入輸出陷阱:輸入"71"卻只讀到'7'的真相

     編輯:程式設計疑難解答

現場代碼

char c;
cin >> c;
cout << c;
// 輸入: 71
// 輸出: 7

根本原因:operator>> 對 char 的特殊語義

C++ 標準規定:提取運算符對 char/signed char/unsigned char 讀取單個非空白字符,跳過前導空白,讀取一字符即停止。

逐幀分析

  1. 輸入緩衝區:'7' '1' '\n'
  2. cin >> c:跳過無前導空白 → 讀取 '7' → c = '7' → 停止
  3. 緩衝區剩餘:'1' '\n'
  4. cout << c:輸出 '7' (ASCII 55)

三種正確讀取「數字 71」的姿勢

1. 讀為整數類型(推薦)

int num;
cin >> num; // num = 71
cout << num;

2. 讀為字符串再轉換

string s;
cin >> s; // s = "71"
int num = stoi(s);

3. 逐字符讀取並手動組裝


char c;
int num = 0;
while (cin >> c) {
    if (c >= '0' && c <= '9')
        num = num * 10 + (c - '0');
    else break; // 遇非數字停止
}

若想輸出字符 '7' 的 ASCII 碼值

char c = '7';
cout << (int)c; // 輸出 55
// 或
printf("%d", c);

避坑清單

  • cin >> charVar 只讀一字符,非讀數值
  • cin.get() 讀取含空白的單字符
  • cin.getline(buf, n) 讀整行
  • 數值輸入必須用數值類型 (int/double/long)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved