我有一個問題,希望用戶能夠輸入名字和姓氏,然后將其列印出來。 該問題還希望我在名字和姓氏之間列印出一個空格,但我不知道如何做到這一點。我還做了這樣的安排:如果用戶輸入'$',程式將停止接受輸入,轉入列印子程式。這是我目前的代碼。
/main program
FirstNameLoop, JnS SubInputFirstName
加載姓名
添加一個
存盤名字
跳轉FirstNameLoop
姓氏回圈,Jns次級輸入最后一個名字
加載名稱
添加一個
存盤名稱
跳過最后一個名字回圈
/輸入名字的子程式
子輸入名字,六角0
輸入
存盤溫度
減去逗號
跳過400
跳轉存盤名
載入逗號
添加一個
儲存I名
跳過LastNameLoop
存盤名,加載溫度
存盤名稱
跳轉到子輸入名
結束,JnS subPrintString
加載姓名列印
添加一個
存盤姓名列印
跳轉 結束
完成,停止
/輸入姓氏的子程式
SubInputLastName, HEX 0
輸入
存盤溫度
減去美元
跳過400
跳過StoreLastName
跳轉結束
存盤最后一個名字,加載溫度
存盤I名稱
跳過I次輸入最后的名字
/列印名字的子程式
subPrintString, HEX 0
加載姓名列印
存盤溫度
減去周期
跳過400
跳轉 列印名稱
跳轉完成
列印名稱,加載溫度
輸出
跳躍I subPrintString
名稱列印, HEX 300
美元,12月36日
名稱,HEX 300
一,DEC 1
溫度,DEC 0
空間,DEC 32
逗號,DEC 44
句號,DEC 46
uj5u.com熱心網友回復:
計算機幾乎可以記住任何東西,但是它必須被準確地告知要記住什么以及什么時候記住,否則它沒有被編程記住的資訊就會丟失,而且沒有辦法恢復。
由于您將名字和姓氏存盤在同一個資料結構中,一旦開始列印,程式就沒有辦法知道名字在哪里結束,姓氏在哪里開始--這些資訊已經丟失。
有許多方法可以捕獲&;將資訊從存在的地方傳遞到需要的地方。 首先,我們在程式中尋找資訊仍然存在的點--它在輸入名字和輸入姓氏之間的邏輯過渡。 當程式看到,字符時,它停止輸入第一個名字并過渡到輸入最后一個名字。 (我們可以將程式視為狀態機,并將其部件視為狀態:這里的程式正在從第一個名字的輸入狀態邏輯地過渡到最后一個名字的輸入狀態。)
作為從輸入名字到輸入姓氏的邏輯轉換的一部分,你可以
(a) 捕捉輸入的資訊。
(a) 捕獲當前的名字指標,因為它指向最后一個名字的第一個字符(尚未捕獲)。 在這一轉換中捕獲了這一點,以后的列印代碼可以詢問并回答以下問題:這是否是最后一個名字的第一個字符,如果是,那么在輸出中插入一個空格。
(b) 在第一個名字的回圈中放置一個計數器(但不在第二個名字的回圈中)。 當第一個名字的回圈結束時,計數器將停止遞增,因此它將保持在第一個名字的長度上。 之后,列印代碼可以詢問并回答以下問題:我們是否列印了第一個名字中的所有字符,以便在第一個名字的最后一個字符之后在輸出中插入一個空格。
(c) 在從第一個名字條目到最后一個名字條目的過渡處,直接在名字字串資料結構中輸入一個空格,這樣,列印輸出將在它們之間列印一個空格,而不會真正知道關于名字和姓氏的任何特殊情況。
(d) 將名字和姓氏存盤在一個不同的資料結構中(兩個獨立的字串)。 列印第一個字串,然后列印一個空格,然后列印第二個字串。
類似地,作為從接受姓氏到列印的過渡的一部分,你應該在字串中附加一個
.字符,以便列印程式知道在哪里停止。 否則,你可能會尋找0(nul)字符而不是.來輸出列印終止。
你正在使用子程式,但也在遇到過渡時直接從子程式跳回主程式,而不是 "回傳"--雖然這是在作業,但這是非常糟糕的形式,因為這是非結構化的控制流。 這種控制流是 Dijkstra 在 1968 年發表《Go To Statement Considered Harmful 》的原因。
在結構化的偽代碼或C語言中沒有辦法寫出這種控制流--在任何現代編程語言中,我們不能直接從一個子程式/函式跳到另一個子程式/函式的任何地方,比如main. 一個函式唯一能做的就是回傳給它的呼叫者。 這樣,一個函式可以從同一程式中的任何其他函式中使用,甚至可以從其他一些函式中的多個地方使用,或者從其他多個函式中使用。
一個函式一旦寫好,也可以在其他程式中使用。
有許多可能的解決方案,其中之一是,子程式將回傳一個答案,告訴呼叫者是否發生了過渡。 然后呼叫者使用答案來決定是否留在回圈中或過渡到main的下一部分。
另一個解決方案是將更多的功能轉移到子程式中,例如,輸入整個名字。 回圈和增量將在子程式中,因此,只有當整個名字被輸入后,它才會回傳給呼叫者。
第二個子程式實際上是第一個子程式的翻版,只有一個區別,即用于過渡的字符。 通過抽象過渡字符的概念--將
,或$作為一個引數--同一個子程式可以同時用于輸入名字和姓氏。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/320413.html
標籤:
