2015-09-11 96 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的第一行代码(以标准::区域)是创造一个无限循环! –