Как дополнить целочисленную печать ведущими нулями? - PullRequest
0 голосов
/ 02 мая 2019

Так что я должен сделать что-то вроде таймера, и это должна быть строка, и она должна иметь 0 раньше, если она меньше десяти, например, 00,01,02 ... 09,10,11, так что все цифры 2 цифры. Но я столкнулся с проблемой, и я не могу решить ее. И мне нужно, чтобы он был как-то так, без ctime или вообще не превращать его в строку.

Я пробовал пару раз также с инструментами декомпилятора, но я вижу, что главная проблема в позициях 4 и 7. Я думаю, что может быть что-то не так с компилятором блоков кода, но я не уверен .

#include <stdio.h>

int main(){
    char tostring[9]={};
    int timer=6588;
    int hours=0;
    int minutes=0;
    int seconds=0;

    hours=timer/3600;
    minutes=(timer%3600)/60;
    seconds=(timer%3600)%60;
    //printf("%i:%i:%i",hours,minutes,seconds);

    if(hours<10){
        tostring[0]=(char)0;
        tostring[1]=(char)hours;
    }else{
        tostring[0]=(char)(hours/10);
        tostring[1]=(char)(hours%10);
    }
    tostring[2]=':';
    if(minutes<10){
        tostring[3]=(char)0;
        tostring[4]=(char)minutes;
    }else{
        tostring[3]=(char)(minutes/10);
        tostring[4]=(char)(minutes%10);
    }
    tostring[5]=':';
    if(seconds<10){
        tostring[6]=(char)0;
        tostring[7]=(char)seconds;
    }else{
        tostring[6]=(char)(seconds/10);
        tostring[7]=(char)(seconds%10);
    }
    tostring[8]='\0';
    printf("%s",tostring);
    return 0;
}

Я ожидаю, что результат будет 01:49:48, но ничего не выходит, только пусто. Каково было бы решение этой проблемы.

Ответы [ 2 ]

2 голосов
/ 02 мая 2019

tostring[0]=(char)0; не записывает символьное представление 0 в строку [0].Это пишет ноль.Вы хотите tostring[0] = '0', с одинарными кавычками.И точно так же, чтобы написать символьное представление одной цифры, вы можете написать tostring[1] = '0' + hours (Если часы равны 5, то '0' + 5 - это значение символа, используемое для представления 5 в локальном наборе символов. К счастью, онодавно было стандартизировано, что эти представления должны быть последовательными, чтобы подобные вещи работали.) Но, если цель этого упражнения не состоит в том, чтобы избегать использования printf, вы должны просто использовать printf.

2 голосов
/ 02 мая 2019

Вместо этого, почему бы вам не напечатать целые числа с фиксированной шириной и дополненные 0?

Что-то вроде

 printf("%02i:%02i:%02i",hours,minutes,seconds);

должно делать эту работу.

Пояснение к спецификации формата %02i:

  • % начало спецификатора преобразования
  • 0 начало 0 s будет использоваться для заполнения (если фактическоедлина значения меньше минимальной ширины поля)
  • 2 значение минимальной ширины поля.
  • i целое число

Отредактированный код:

#include <stdio.h>

int main(void){

    int timer=6588;
    int hours=0;
    int minutes=0;
    int seconds=0;

    hours=timer/3600;
    minutes=(timer%3600)/60;
    seconds=(timer%3600)%60;

    printf("%02i:%02i:%02i",hours,minutes,seconds);

    return 0;
}
...