[英]Edit a body of text from the command line in C
我正在用C編寫一些小程序-一些登錄,注銷,創建帳戶,將消息發送到另一個帳戶的交易-我可以在此基礎上進行更改,創新和完善以提高我在C中的技能。
我試圖弄清楚的是如何實現“撰寫郵件”選項的一部分。 在提示您輸入郵件的收件人,主題和正文之后,我希望能夠返回並對其進行編輯,而無需重新輸入整個內容。 因此,如果我選擇“編輯消息”選項,它將寫出我擁有的內容,然后讓我返回並更改某些內容。
我已經在x86匯編中完成了類似的工作,或者開始進行了這樣的工作,因此我基本上了解了如何在計算機級別實現此功能,但是我不知道如何在C中實現它。我做這個嗎?
諸如此類的事情使我困惑於C語言:
另外,如果以前已經做過,並且有一個類似這樣的功能的庫(甚至是我不知道的標准庫),請注意,我確實想為學習而自費 。
我想我腦中的方法是一次讀取一個消息正文,這樣我就可以解釋回車並創建多行消息。 但是我不確定如何通過它退格。 我想從命令行(?)做到這一點真的很難。
如果不是不可能的話,請向后移動光標並清除輸入緩沖區中已有的字符...我是否每次都必須“重新繪制屏幕”? 就像我可以控制整個控制台並只在特定位置讀取和寫入擊鍵一樣嗎? 還是太靠近機器了? 我有點用匯編來做到這一點,但是它使用了16位中斷,我不允許在C中使用它。這就是我在匯編中寫的:
(曾經在這里的圖像消失了)
程序將一個字節值轉換為代表該字節的兩個字符代碼,然后跳到右列並寫入原始字節(顯示為字符),然后跳回並寫出另外兩個十六進制數字,下一個插槽...等等,從左到右,從上到下...很簡單,但是我不知道如何在C中實現。我所能做的就是INT 21樣式的輸入和輸出,編寫行到會向上滾動窗口的控制台,依此類推。
ANSI C中沒有辦法制作便攜式線路編輯器。 如果您自己滾動,則必須為要運行程序的每個新操作系統重新滾動它。
如果我可以提出建議,我將使用一個預先存在的庫來完成所有艱苦的,特定於平台的骯臟工作,並以這種直率的態度學習如何處理任意長度的輸入之類的東西。 然后,當您的代碼正常工作(並且很好)時,學習如何完成所有這些骯臟的工作,並取走庫拐杖。 這樣,您就無法解決所有問題,而是將其分解為更易於管理的部分。
甚至這有點過於簡單化。 我花了相當長的時間來學習如何處理任意長度的輸入。
另外,要知道,如果您希望代碼具有可移植性,那么刪除庫依賴項將意味着,如果要移植它,則必須要么a)重寫所有這些骯臟的代碼,要么b)添加圖書館回來。
要開個玩笑,這是您的大腦與庫:
Pigmaei gigantum humeris impositi plusquam ipsi gigantes vident。
(如果我看得更遠,那就是站在巨人的肩膀上。)
- 艾薩克·牛頓
這是沒有庫的大腦:
如果我還沒有看到其他人,那是因為巨人站在我的肩膀上。
-哈爾·阿伯森
我寫了一個文本編輯器。
我從事C已有20年了。
文本的數據結構是我曾經寫過的最復雜的單個數據結構。 這是一個數據結構,可以根據您的指定有效地處理任意長度的文本。
如果您是C語言的新手,那么您所咬的東西比您可以咀嚼的更多。
我建議一個簡單的數據結構,例如緩沖區或鏈表-您不能處理任意長度的文本,但是總比沒有好。
這與系統(OS)高度相關。 我認為您正在嘗試在Windows上執行此操作。
您可以使用Windows控制台API來執行此操作。
如果您想學習一些庫以供參考(在自己動手之前),那么一個不錯的庫是GNU Readline 。
至於保存數據,我猜想繩索將是可用的最佳數據結構:以簡化形式,它是一棵字符串樹。 當您想在屏幕上打印時,您需要做的就是按預定順序走動並打印。 將一條線分成兩段涉及一個相對簡單的樹操作:添加葉。 困難的部分是拆分字符串本身(復制字符串,將舊端設置為0,添加葉子,添加指針)...
現在,存在跟蹤光標的問題...您可以留下一條痕跡,從根到當前光標所在的位置。
還考慮過一種可調整大小的控制台...也就是說,如果您希望編輯器能夠在終端寬度為80或200個字符的情況下工作...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.