我用的是 vs 2003,在调试程序时发现运行的状况和显示的不一样,举个例子:在进入一个swich后,运行到一个case中,运行完break语句后应该是跳出这个swich才对啊,它怎么又跑到下一个case中去了,但是好像又不是运行的另外一个case的语句。还有一种情况,我明明把一些语句给注释掉了,为什么还是老跑到里面去?真是郁闷,大家有遇到这样的问题吗?怎么解决?注:我现里面用多了多线程。

解决方案 »

  1.   

    NET应该没有这种问题.一定是你跟不上它的调用方式.自己的思路混乱了吧
      

  2.   

    代码就是这个样子,老是出错,出错信息为:"Run - Time Check Failure #3 - Thre variable 'tok_len' is being used without bein defined."string_t 
    DateFormat::format (const Date* date, const string_t& pattern) const
    {
    // the length of the format is usually a good guess of the number
    // of chars in the result. Might save us a few bytes sometimes
    // Add + 10 for cases like mmmm dddd
    string_t result;
    size_t size = pattern.size ();
    result.reserve (size + 10); size_t i = 0;
    const TCHAR* pattern_str = pattern.c_str ();
    //DateTimeExpr dte (date->local_time ()); // The date object is not a local time //BUGS: cannot calculate the correct time when used local ticks
    DateTimeExpr dte (date->time ()); 
    int hour_offset = (int) (TimeZone::current_time_zone ()->utc_offset (date) / ticks_per_hour);
    if (hour_offset < 0 && (int)dte.tm_hour < -(hour_offset)) {
    dte.tm_mday--;
    dte.tm_hour += 24;
    }
    dte.tm_hour += hour_offset; while (i < size) 
    {
    int tok_len;
    TCHAR ch = pattern_str [i];
    switch (ch) 
    {
    //
    // Time Formats
    // case _T('h'):
    {
    // hour, [1, 12]
    tok_len = count_repeat (pattern_str, size, i, ch); unsigned int hr = dte.tm_hour % 12;
    if (hr == 0)
    hr = 12; result_pad (result, hr, 
    tok_len == 1 ? false : hr > 9 ? false : true);
    break;
    } case _T('H'):
    {
    // hour, [0, 23]
    tok_len = count_repeat (pattern_str, size, i, ch);
    result_pad (result, dte.tm_hour, 
    tok_len == 1 ? false : (dte.tm_hour > 9 ? false : true));
    break;
    }
    case _T('m'):
    {
    // minute, [0, 59]
    tok_len = count_repeat (pattern_str, size, i, ch);
    result_pad (result, dte.tm_min, 
    tok_len == 1 ? false : dte.tm_min > 9 ? false : true);
    break;
    } case _T('s'):
    // second [0, 29]
    {
    tok_len = count_repeat (pattern_str, size, i, ch);
    result_pad (result, dte.tm_sec, 
    tok_len == 1 ? false : dte.tm_sec > 9 ? false : true);
    break;
    } case _T('p'):
    // AM/PM. 
    {
    tok_len = 1;
    result.append (SimpleDateFormat::current_time_indicator (dte.tm_hour < 12));
    break;
    } case _T('z'):
    // timezone
    case _T('Z'):
    {
    CFLASSERT (false); // pls impl.
    break;
    }
    //
    // Date tokens
    //
    case _T('d'):
    {
    // day. d(dd) = day of month 
    tok_len = count_repeat (pattern_str, size, i, ch);
    result_pad (result, dte.tm_mday, 
    tok_len == 1 ? false : dte.tm_mday > 9 ? false : true);
    break;
    } case _T('e'):
    {
    tok_len = 1;
    result.append (SimpleDateFormat::current_week_day (dte.tm_wday, true));
    break;
    } case _T('E'):
    {
    tok_len = 1;
    result.append (SimpleDateFormat::current_week_day (dte.tm_wday, false));
    break;
    } case _T('w'):
    {
    tok_len = 1;
    result_pad (result, dte.tm_wday, false);
    break;
    } case _T('W'):
    {
    CFLASSERT (false); // TODO:
    break;
    } case _T('M'):
    {
    /*// Month.m(m?) = month # (with leading 0 if two mm)
    // mmm = 3 letter name
    // mmmm+ = full name
    */
    tok_len = count_repeat (pattern_str, size, i, ch);
    int month = dte.tm_mon; if (tok_len == 1)
    result_pad (result, month, false);
    else if (tok_len == 2)
    result_pad (result, month, month > 9 ? false : true);
    else if (tok_len == 3)
    result.append (SimpleDateFormat::current_month (month, true));
    else
    result.append (SimpleDateFormat::current_month (month, false));
    break;
    } case _T('y'):
    {
    /* Year. y(y?) = two digit year, with leading 0 if yy
     yyy+ full year, if yyy and yr < 1000, displayed as three digits*/
    tok_len = count_repeat (pattern_str, size, i, ch); int year = tok_len > 2 ? dte.tm_year : dte.tm_year % 100;
    if (tok_len == 1)
    result_pad (result, year, false);
    else if (tok_len == 2)
    result_pad (result, year, (year < 10));
    else
    result_pad (result, year, false);
    break;
    } case ('g'):
    case ('G'):
    // Era name
    CFLASSERT (false);
    break; //
    // Other
    //
    case '\'':
    {
    // literal
    size_t l = i + 1;
    while (true)
    {
    TCHAR c = pattern_str[l++]; if (c == '\'') {
    if (pattern_str[l] != '\'') // Peek next to check double ''
    break;
    else 
    l++; // skip it
    } result.append (1, c);
    }

    tok_len = (int) (l - i);
    break;
    }

    default:
    // catch all unkown token
    {
    result.append (1, ch);
    tok_len = 1;
    break;
    }
    } i += tok_len;
    } return result;
    }