2015-09-11 157 views
-1

我這裏有一個非常骯髒的一段代碼(這是很棘手的代碼來折磨學生)整蠱代碼:性病::區域::全球(標準::區域設置( 「」));

#include "stdafx.h" 
#include <iostream> 
using namespace std; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    std::locale::global(std::locale("")); 

    cout << "MagicIF" << endl; 
    cout << "-------" << endl << endl; 

    int a(7), b(42), c(1); 
    cout << "a = " << a << endl << "b = " << b << endl << "c = " << c << endl << endl; 

    if (a < b) 
     if (c > a) 
      cout << "a ist kleiner als b und kleiner als c." << endl; 
    else 
     cout << "a ist grösser oder gleich b." << endl; 

    cout << endl; 
    system("pause"); 
    return 0; 
} 

第一行是令人興奮的部分:

std::locale::global(std::locale("")); 

當您啓動代碼,因爲他是,「if/else」構造將無法正常工作。當您設置一些大括號以便「if/else」正在工作時,上面的行可能會創建一個無限循環。

那麼,這怎麼可能?這條線正在做什麼?

+0

['的std :: locale'](http://en.cppreference.com/w/cpp/locale/locale)是有據可查的。沒什麼特別的。你在吠叫錯誤的樹。 –

+0

Upvoters介意解釋?由於這個問題顯然是脫離主題。 –

+0

我什麼都看不到任何技巧。如果設置全局語言環境導致無限循環,我期望有問題的運行時(特別是那個特定的本地化)是錯誤的。我感到驚訝的是,在最後的字符串文字中給出'ö'字符的代碼編譯。 –

回答

4
std::locale::global(std::locale("")); 

沒問題,它將全局語言環境設置爲某些默認語言環境。

你真正的問題是與其他匹配到合適的如果。您的代碼真的

if (a < b) 
    if (c > a) 
     cout << "a ist kleiner als b und kleiner als c." << endl; 
    else 
     cout << "a ist grösser oder gleich b." << endl; 

現貨的區別?

您可能要添加一些{}得到正確的if-else配對。

+0

謝謝你的回答!當然,我知道如何使用{};)的問題(至少在我的系統),只要我在該地區更改代碼的if/else的第一行代碼(以標準::區域)是創造一個無限循環! –