2017-09-06 59 views
0

我正在執行的程序的正常輸入爲5:3B2F。 ,在同一行的所有插入和outputwould是寫在3B2F底座5讀取字符串並同時使用它們(pascal)

我們已指示閱讀該行兩個字符(一個爲基地,另一種爲數字)

的我所遇到的問題是,我不知道如何去查看每個單獨的角色並同時進行操作,忽略了「:」和「。」,然後我還必須確保「數字」來自「:」到「。」。最多有7個字符。

另外,作爲即時閱讀的enrty爲char時基本是一個數字我得到一個錯誤說預期的字符卻發現SMALLINT

我是個初學者,我們不允許使用數組

 num:=0; 
     read(base,digits); 

     while (base <> '$') and (digits < MAXLENGHT) do 

我怎麼檢查的數字是有一定長度)

 begin 
     num:=(num*base)+digit; 

(此理線應重複每個數字在「數字」(exept爲:和。),我不知道如何做)

 writeln(num); 
     read(base,digits) 
     end; 
+0

':'總是存在嗎?如果是的話,將行徹底讀入字符串並將其分爲兩部分似乎更容易。 – gammatester

回答

0

你的榜樣5:3B2F什麼基礎是3B2F一部分?我猜想16但肯定它必須被定義,不是嗎?

閱讀整個輸入作爲字符串(說成inStr: string;。 然後分成兩字符串(在結腸),並使用val()函數到琴絃radix: integer和第二轉換爲值,第一,比方說,以inValue: integer 。如果第二部分是十六進制的,你需要在字符串前添加'$',否則`val()'會扼殺字符串或給出錯誤的結果。

更高級的學習方式使用一個或兩個repeat - until循環與case語句從輸入中提取值:

// to extract the requested radix 
done := False; 
i := 1; 
repeat 
    c := inStr[i]; 
    case c of 
    '0'..'9': radix := radix * 10 + (ord(c) - Ord('0')); 
    ':'  : done := True; 
    else //Show error invalid input and terminate 
    end; 
    inc(i); 
    // show error if i > n, whatever n is 
until done ; 

// a similar loop and case for cases of characters '0'..'9', 'A'..'F' and 'a'..'f'. 

爲了不破壞你的家庭作業,我留下這個讓你解決。

相關問題