Как я могу напечатать пустой символ, используя printf? - PullRequest
2 голосов
/ 01 апреля 2011

В настоящее время я использую следующий код для печати прошедшего времени (в секундах) на экране:

for(int i = 1;  i < 20;  i++)
{
    char cheese[0];

    if(i < 10)
    {
        cheese[0] = '0';
    }
    else    cheese[0] = '\0';

    system("CLS");
    printf("%c%i", cheese[0], i);

    Sleep(1000);
}

Я хотел бы вывести время как:

..
08
09
10
..

Как я могу это сделать?

Ответы [ 4 ]

3 голосов
/ 01 апреля 2011
for(int i = 1;  i < 20;  i++)
{
    system("CLS");
    printf("%02d", i);

    Sleep(1000);
}

... вероятно, ближе к тому, что вы хотите.

3 голосов
/ 01 апреля 2011

Используйте что-то вроде:

printf("%02i", i);

Это всегда будет содержать по крайней мере две цифры с ведущими нулями, если необходимо.

Если вы хотите заполнить пробелом вместо нуля, выследует использовать:

printf("%2i", i);

Будет выдано:

 1
 2
10

Не рекомендуется:

Если вы хотите сделать это без использования спецификатора размерав строке формата вы можете сделать трюк, подобный следующему:

char pad[2];
pad[1] = 0; // make sure the pad string is terminated properly
if (i >= 10) {
 pad[0] = 0; // plain zero - end of string marker
} else {
 pad[0] = '0'; // character zero
}
printf("%s%i", pad, i);

pad будет строкой нулевой длины, если i имеет хотя бы две цифры, поэтому printf не будет выводить символ.

0 голосов
/ 01 апреля 2011

Это даст желаемый результат

for(int i = 1;  i < 20;  i++)
{        
    printf("%d2", i);    
    Sleep(1000);
}

Но если вы хотите распечатать прошедшее время, вам не следует делать это таким образом.

0 голосов
/ 01 апреля 2011

Если вам нужны постоянные двузначные цифры, почему бы не просто так?

printf ("% 02d", i)

добавление нулевого символа для значений> 10 звучит страшно, кстати. (также из-за того, что% c напечатает -something-, в действительности ноль, в отличие от% s он не остановится при первом обнаружении \ 0).

...