1. C++ / Говнокод #6115

    +172

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    CString convertInt2Str(int i_Number, int i_NumDigits)
    {
    	CString str = "";
    	for(int j=1; j<i_NumDigits; j++)
    	{
    		int digits = (int) pow((float) 10, j);
    		
    		if(i_Number<digits) str += "0";			
    	}	
    	CString num;
    	num.Format("%d", i_Number);
    	return str+num;
    }

    Adding leading zeros...

    Запостил: Aleskey, 29 Марта 2011

    Комментарии (25) RSS

    • полный
      Ответить
    • Вот такие люди с пеной у рта троллят printf и молятся на cout...
      Ответить
      • вообще-то пена у рта - верный признак, что пора отстреливать
        Ответить
      • Вы не поверите, но с cout тоже можно сделать это нормально. Здесь, впрочем, он не нужен.
        Ответить
    • как мне нравится строка 11... тянет даже на отдельный говнокод )
      Ответить
      • да тут все тянет на отдельный говнокод. Например префикс "i_" означает входящий аргумент, а не int. В других функциях встречается еще "о_" соответственно.
        Ответить
    • что самое сука характерное - чел умеет пользоваться форматированием строки
      num.Format("%d", i_Number);
      Ответить
      • может он только это и знает:(
        для нуля и отрицательных чисел будет некорректно
        ну и для i_NumDigits > 9
        Ответить
        • Это использовалось для генерации имен файлов: 0000, 0001, 0002, ...
          Ответить
          • CString str;
            str.Format("%%0%ud", i_NumDigits);

            CString num;
            num.Format(str, i_Number);
            Ответить
            • Во-первых, почему для 'i_NumDigits' использовано '%u', а для 'i_Number' вдруг '%d'??? Оба имеют тип 'int'.

              Во-вторых, если этот 'CString::Format' полностью поддреживает спецификаторы 'fprintf', то все делается еще проще

              CString num;
              num.Format("%.*d", i_NumDigits, i_Number);
              Ответить
              • Так правильней: "%0*d" - это width, а не precision
                http://codepad.org/9Fdbgsts
                Ответить
                • Что значит "правильней"? Результат одинаков, а вот что именно "правильней" в данном случае использовать - width или precision - вопрос философский и неоднозначный. Я вот тоже сначала подумал про вариант с width, а потом посозерцал пупок минут с пятнадцать и пришел к выводу, что все-таки идеологически правильней - именно precision.
                  Ответить
                  • precision для int - идеологически правильнее ?
                    Ответить
                    • Да, правильнее. Не надо просто с повседневно-обывательской точки зрения трактовать термины. Спецификация языка четко говорит о том, что значит precision в случае вывода целого числа - precision указывает сколько знаков (как минимум) должна содержать запись числа. Именно поэтому я и считаю precision более правильным вариантом. В случае precision ведущие нули являются частью записи числа. А в случае width - они лишь отдельный заполнитель пустого пространства слева. Как часть записи числа они мне нравятся больше.
                      Ответить
                      • Ок. С int'ом мысль ясна. Допустим тип поменялся на double - за лидирующие нули в целой части precision уже не отвечает. Т.о. функцию precision стал выполнять width. Как это с идеологической точки зрения на Ваш взгляд?
                        Ответить
    • vanished
      Ответить

    Добавить комментарий