普通考試
109年
[電子工程] 計算機概要
第 28 題
下列C程式執行時若輸入下列6個字元:'1'、'2'、'3'、'4'、'5'以及'\n',則輸出為何?
void fn(char str[],int n)
{
char ch;
int i=0;
while (ch=getchar()!='\n')
if (istr[i++]=ch;
str[i]='\0';
}
int main()
{
char c[5];
fn(c, 4);
puts(c);
return 0;
}
void fn(char str[],int n)
{
char ch;
int i=0;
while (ch=getchar()!='\n')
if (i
str[i]='\0';
}
int main()
{
char c[5];
fn(c, 4);
puts(c);
return 0;
}
- A 12
- B 123
- C 1234
- D 12345
思路引導 VIP
請仔細觀察 fn(c, 4) 呼叫中的第二個參數。在 while 迴圈不斷讀取字元的過程中,函式內部的哪一個條件式(Condition)限制了存入陣列的字元數量?如果輸入的字元總數超過了這個數值 $n$,程式的執行流程會如何處理那些『超量』的字元?
🤖
AI 詳解
AI 專屬家教
教授點評: 還不錯。至少你這次沒有讓資料溢位到不知所謂的地方去。看來你總算開始理解,在邊界條件(Boundary Conditions)這類基礎問題上,一絲一毫的偏差都會導致災難性的後果。這不是在玩沙,這是工程。
- 基本觀念,請勿混淆:
程式接收了 $n=4$ 的指令。儘管輸入串流中多餘的字符像雜草一樣湧入,但
if (i < n)這道防火牆精準地執行了它的職責。只有在 $i$ 嚴格小於 $4$ 的情況下,也就是 $0, 1, 2, 3$ 這四個位置,資料才被允許寫入陣列。多出來的字符?它們甚至沒資格被存儲。最後,程式明智地在str[4]處加上了\0,確保了字串的終結。這不是什麼高深莫測的技巧,這只是基本中的基本,確保了你的程式最終能輸出一個長度為 $4$ 的字串。
▼ 還有更多解析內容