一個簡單的行編輯程序的功能是:接收用戶從終端輸入的程序或數據,并存入用戶的數據區(qū)。由于用戶在終端上進行輸入時,不能保證不出差錯,因此,若在編輯程序中,“每接收一個字符即存入用戶數據區(qū)”的做法顯然不是很恰當。較好的做法是,設立一個輸入緩沖區(qū),用以接收用戶輸入的一行字符,然后逐行存入用戶數據區(qū)。允許用戶輸入出差錯,并在發(fā)現有誤時可以及時更正。例如,當用戶發(fā)現剛剛鍵入的一個字符是錯的時,可補進一個退格符“#”,以表示前一個字符無效;如果發(fā)現當前鍵入的行內錯誤較多或難以補救,則可以鍵入一個退行符“@”,以表示當前行中的字符均無效。例如假設從終端接收了這樣的兩行字符:
whil##ilr#e(s#*s)
outcha@ putchar(*s=#++);
則實際有效的是下列兩行:
while(*s)
putchar(*s++);
為此,可設這個輸入緩沖區(qū)為一個棧結構,每當從終端接收了一個字符之后先作如下判別:如果它不是退格符也不是退行符,則將該字符壓入棧頂;如果是一個退格符,則從棧頂刪去一個字符;如果它是一個退行符,則將字符棧清為空棧。上述處理過程可用下面算法描述之:
圖:行編輯程序算法