原始錯誤代碼
if (a[i] == '32') // 錯誤:'32' 是多字符字面量,值實現定義
t++;
修正方案
// 方案一:直接用字符字面量(最推薦,可讀性最強)
if (a[i] == ' ') t++;
// 方案二:用 ASCII 碼整數(無單引號)
if (a[i] == 32) t++;
// 方案三:標準庫函數(可移植、語義清晰)
#include <ctype.h>
if (isspace((unsigned char)a[i])) t++; // 統計所有空白字符:空格、制表符、換行等
完整可運行程序
#include <stdio.h>
#include <ctype.h>
int main() {
char a[100];
printf("請輸入字符串:\n");
fgets(a, sizeof(a), stdin); // 比 gets 安全
int t = 0;
for (int i = 0; a[i] != '\0'; i++) {
if (isspace((unsigned char)a[i])) t++;
}
printf("空白字符個數:%d\n", t);
return 0;
}
關鍵點總結
'32' 是**多字符字面量**,非數字 32,行為未定義;
- 統計空格首選
' ',統計所有空白用 isspace;
- 輸入用
fgets 替代危險的 gets(已從 C11 移除)。