Понимание результатов этого printf - PullRequest
1 голос
/ 02 апреля 2020

Я пытаюсь использовать значение ASCII "возврат каретки" в массиве символов, а затем использую printf ("% s") для печати строки, но получаю странные результаты.

Это мой код:

#include <iostream>

int main(){
    char text[10];
    text[0] = '1';
    text[1] = '2';
    text[2] = 13;
    text[3] = 'n';
    text[4] = '3';
    text[5] = 13 ;
    text[6] = '4';

    printf("%s", text);
}

и вывод: 43

, но когда я добавляю один символ в массив следующим образом:

#include <iostream>

int main(){
    char text[10];
    text[0] = '1';
    text[1] = '2';
    text[2] = 13;
    text[3] = 'n';
    text[4] = '3';
    text[5] = 13;
    text[6] = '4';
    text[7] = '5';

    printf("%s", text);
}

, вывод 45

Затем я использую символ 10 вместо 13, например, так:

#include <iostream>

int main(){
    char text[10];
    text[0] = '1';
    text[1] = '2';
    text[2] = 10 ;
    text[3] = 'n';
    text[4] = '3';
    text[5] = 10 ;
    text[6] = '4';
    text[7] = '5';

    printf("%s", text);
}

получится:

12
n3
45

Может кто-нибудь объяснить мне причина разницы между первым и вторым выходом?

Чем отличается символ 10 от символа 13 от способа, которым функция printf("%s") справляется с ними?

1 Ответ

2 голосов
/ 02 апреля 2020

In ASCII :

  1. 10 означает '\n'

  2. 13 означает '\r'

\ n (новая строка) :

Перемещает активную позицию в начальную позицию следующая строка.

\ r (возврат каретки) :

Перемещает активную позицию в начальную позицию текущей строки.

Прежде чем продолжить, убедитесь, что ваша строка завершена нулем. Добавьте \0, чтобы отметить конец строки и избежать неопределенного поведения.

Case 1

Печать text = "12 \ rn3 \ r34"

  1. печать 1 {1}

  2. печать 2 {12}

  3. \r курсор возвращается (к 1) {12}

  4. печатать n (перезаписывать 1) {n2}

  5. печать 3 (перезапись 2) {n3}

  6. \r курсор возвращается (к n) {n3}

  7. печать 4 (перезапись n) {43}

Таким образом вывод: 43 .

Дело 2

Печать text = "12 \ rn3 \ r345"

То же, что и предыдущие шаги 1-7 {43}

печать 5 (перезапись 3) {45}

Таким образом, получается 45 .

Дело 3

Печать text = "12 \ nn3 \ n45"

  1. печать 1

  2. печать 2

  3. \n курсор переходит на следующую строку

  4. print n

  5. print 3

  6. \n курсор переходит на следующую строку

  7. печать 4

  8. печать 5

Таким образом, на выходе получается

12

n3

45

...