結構體的字串輸入要求和執行時錯誤

2021-10-02 04:02:41 字數 1335 閱讀 1682

在今天一題中,發現一些不會的內容。

題目要求輸入如下

輸入格式:

輸入第一行給出正整數n(<10),隨後給出n本書的資訊。每本書在一行中給出書名,即長度不超過30的字串,隨後一行中給出正實數**。題目保證沒有同樣**的書。

輸出格式:

在一行中按照「**, 書名」的格式先後輸出**最高和最低的書。**保留2位小數。

輸入樣例:

3programming in c

21.5

programming in vb

18.5

programming in delphi

25.0

這時候如果我們用

gets((

*(a+i)

).name)

;scanf

("%lf",&

(*(a+i)

).price)

;

是無法實現對內容的輸入的

倘若在之前寫下

scanf

("\n");

gets((

*(a+i)

).name)

;scanf

("%lf",&

(*(a+i)

).price)

;

在每次輸入之前輸入乙個換行,就可以實現內容的輸入

然後就是關於執行中錯誤的問題

這時候通常都是因為越界導致的

比如題目要求書長為30個字元長度,不應該直接

struct book ;

因為在字元的最後有乙個**\0**符號要占用乙個位置

於是正確應該是

struct book

;

這是很容易讓我出現問題兩個情況。

最後是總**

#include

#include

struct book

;int

main()

for(i=

0;i)elseif(

(*(a+i)

).priceprintf

("%.2lf, %s\n",(

*(a+k1)

).price,(*

(a+k1)

).name)

;printf

("%.2lf, %s",(

*(a+k2)

).price,(*

(a+k2)

).name)

;return0;

}

C 執行時通過字串動態建立類

有時候我們希望通過乙個字串建立類,可以通過if.else.來實現 string str some class name 如if str string class1 else str string class2 else上面 不僅醜陋,而且難以擴充套件,如果我們希望用乙個統一的基類來呼叫函式,如 st...

JDK1 8關於執行時常量池, 字串常量池的要點

網上關於jdk 1.8的各種實驗,結論魚龍混雜 很多都相矛盾,網上有的實驗也被後人測試出了不同的結果 很多都分辨不了真假,這裡記錄一下網路上正確的結論,歡迎指正 首先自行區分執行時常量池與class檔案常量池 靜態常量池 的概念,jvm記憶體模型 方法區與永久代的區別,有些在我的其他部落格有介紹,連...

JVM 常量池 執行時常量池 字串常量池的理解

補充 答 常量池有class檔案的常量池 在檔案中 執行時常量池 記憶體中,由class檔案常量池得來 字串常量池是大的全域性字串快取池,公用。問 是的,那我這裡有點疑惑,就是這個helloword在編譯期的時候,是存於class的常量池中的,在class被載入後,存於記憶體中的執行時常量池,那麼,...