#include <stdio.h>
#include <string.h> // 用于 strlen()
int main() {char a[100];int j = 0;// 從用戶輸入讀取字符串printf("請輸入一個字符串: ");fgets(a, sizeof(a), stdin);// 遍歷字符串中的每個字符for (int i = 0; i < strlen(a); i++) {if (a[i] >= 'a' && a[i] <= 'z') {j++;}}// 輸出小寫字母的數量printf("%d\n", j);return 0;
}
1.?char a[100];
-
定義了一個字符數組?
a
,大小為 100,用于存儲用戶輸入的字符串。
2.?int j = 0;
-
定義了一個整數變量?
j
,初始化為 0。這個變量用于統計小寫字母的數量。
3.?int b;
-
定義了一個整數變量?
b
,用于存儲數組?a
?的大小。
4.?getchar(a);
-
問題:
getchar()
?用于從標準輸入讀取單個字符,但這里錯誤地傳遞了數組?a
?作為參數。 -
修正:應該使用?
fgets(a, sizeof(a), stdin)
?或?scanf("%s", a)
?來讀取字符串。
5.?b = sizeof(a);
-
問題:
sizeof(a)
?返回的是數組?a
?的總大小(這里是 100 字節),而不是字符串的實際長度。 -
修正:應該使用?
strlen(a)
?來獲取字符串的實際長度。
6.?for (char i = 0; i < b; i++)
-
問題:
-
循環變量?
i
?是?char
?類型,范圍有限(-128 到 127),可能導致溢出。 -
循環條件是?
i < b
,但?b
?是數組的總大小(100),而不是字符串的實際長度。 -
循環中檢查的是?
i
?是否為小寫字母,而不是檢查字符串?a
?中的字符。
-
-
修正:
-
應該使用?
int i
?作為循環變量。 -
循環條件應該是?
i < strlen(a)
。 -
循環中應該檢查?
a[i]
?是否為小寫字母。
-
7.?if (i >= 'a' && i <= 'z')
-
問題:這里檢查的是循環變量?
i
?是否為小寫字母,而不是字符串?a
?中的字符。 -
修正:應該檢查?
a[i]
?是否為小寫字母。
8.?j++;
-
如果條件成立,
j
?的值加 1,用于統計小寫字母的數量。
9.?printf("%d", j);
-
輸出變量?
j
?的值,即小寫字母的數量。 -
#include <stdio.h> #include <string.h> // 用于 strlen()int main() {char a[100];int j = 0;// 從用戶輸入讀取字符串printf("請輸入一個字符串: ");fgets(a, sizeof(a), stdin);// 遍歷字符串中的每個字符for (int i = 0; i < strlen(a); i++) {if (a[i] >= 'a' && a[i] <= 'z') {j++;}}// 輸出小寫字母的數量printf("%d\n", j);return 0; }