2010-06-29 42 views
1

編輯之前您閱讀:對不起。我沒有添加換行符,所以它似乎混亂,我不能刪除這個問題,因爲我還沒有註冊,遺憾浪費你的時間人。簡單的簡單模板返回奇數?

我剛剛第一次使用了模板(用於查找兩個數字的MIN)而不是宏,我喜歡它!但是,當我試圖修改,讓我自己的模板就徹底失敗了。這裏是我的代碼:

#include <stdio.h> 

template <class T> T min(T a, T b) { 
    return a < b ? a : b; 
}; 

//My attempt now.. because add could be int, float, etc; I wanted a template. 
template <class T> T add(T a, T b) { 
    return a + b; 
}; 

int main(){ 

    printf("%f\n", min(1.3, 2.2)); //(Does not appear in console?) 
    printf("%d", add(1, 10));  //1.300000 (how is an int show as float? lol) 
    printf("%f", add(5.1, 7.34)); //1112.440000 
    return 0; 
} 

現在奇怪的結果是在評論..閩工作正常,但是當我改變它從比較「a + b」它阻止了min的工作,並傳遞給我奇怪的浮點值?!

我用錯了嗎? ,它應該是別的嗎?那是什麼意思?我瞭解基礎知識,所以簡單的說明就可以了。謝謝!

+2

不要難過,只要接受正確的答案。 – 2010-06-29 10:47:36

回答

3

嘗試在其他行之後添加換行符。

什麼情況是這樣的:

  1. 它打印min(1.3, 2.2)這是1.300000
  2. 它打印一個換行符
  3. 它打印add(1, 10),這是11
  4. 它打印add(5.1, 7.34)這是12.440000

S因爲第3步和第4步之間沒有換行符,它會直接打印數字,使其看起來像這樣:1112.440000

+0

對,有時候我很笨(謝謝。 – 2010-06-29 10:45:34

0

一旦你在更換Ç習慣,檢查出流:

int main() 
{ 
    std::cout << min(1.3, 2.2) << '\n' 
       << add(1, 10) << '\n' 
       << add(5.1, 7.34) << '\n'; 
    return 0; 
} 
+1

缺少分號嗎?不應該是'endl'而不是''\ n''? – 2010-06-29 11:31:59

+1

@Paul:感謝您收到分號,我修好了。然而,你很少想要手動刷新流,這是'std :: endl'在輸出''\ n''之前所做的。因此'std :: endl'幾乎總是不需要,有時它是錯誤的。我看到一個應用程序廣泛地將數據寫入磁盤的速度提高了將近10倍,當幾個關鍵的'std :: endl'被替換爲'\ n''時,我的建議是隻使用(在上面的例子中,當離開'main()'時,應用程序清理將刷新流)。 – sbi 2010-06-29 11:36:47

+0

關於'endl'與''的有趣點\ n 「 - 我以前沒有考慮過這種微妙之處 - 感謝澄清。 – 2010-06-29 12:04:18