Печать символа после массива структуры - PullRequest
0 голосов
/ 17 апреля 2019

Когда мой код выполняется так, что он печатает array из struct, за которым следует char, он не будет печатать char, если я не помещу его в отдельный оператор printf. Мне интересно почему ?

Подсказка о проблеме с практикой:

  • Комплексное число - это число вида a + ib, где a называется действительная часть, b называется мнимой частью, и я =. В этом проблема, вы НЕ рассчитываете комплексное число; скорее вы просто читать в реальных и мнимых частях и распечатать их. •
    • Написать программа, которая определяет тип для структуры для комплексного числа (это должно иметь два члена, для реальной и мнимой частей).
    • Подскажите пользователь отдельно вводит значения для реальной и мнимой частей, и сохраните их в структурной переменной этого типа.
    • Распечатать комплексное число в виде + ib. (Просто напечатайте значение, затем строка «+ i», а затем значение б).
    • Измените вашу программу на иметь массив структур для комплексных чисел.

Когда я кодирую решение в виде оператора printf в этом формате, оно работает:

printf("a + bi = %d + %d",mynum[0],mynum[1]); printf("%c\n",imaginary);

Принимая во внимание, что код в этом формате пропускает char и поэтому не работает:

#include <stdio.h>

typedef struct{
    int a, // real part
        b; // imaginary part
}ComplexNum;

void main()
{
    int a, //real part
        b; //imaginary part
    char imaginary = 'i'; //imaginary number

    printf("Enter the real part: ");
    scanf("%d",&a);
    printf("Enter the imaginary part: ");
    scanf("%d",&b);
    ComplexNum mynum[2] = {a,b};
    printf("a + bi = %d + %d%c\n",mynum[0],mynum[1],imaginary);

    return 0;
}

Например, если я введу 2 и 3 для входа, выход выдаст «a + bi = 2 + 3», а не «a + bi = 2 + 3i».

Я понимаю, что есть обходные пути, например, вместо того, чтобы кодировать его как printf("a + bi = %d + %di\n",mynum[0],mynum[1]);, чтобы i включался в оператор printf, а не включался в переменную, но, опять же, я хочу знать , почему эта ошибка происходит.

Спасибо!

1 Ответ

2 голосов
/ 17 апреля 2019

Печать char рядом с int не является проблемой.

1) Вы создаете массив ComplexNum, когда вам нужен только один. Вам необходимо изменить:

ComplexNum mynum[2] = {a,b};

до:

ComplexNum mynum = {a,b};

или

ComplexNum mynum;
mynum.a = a;
mynum.b = b;

2) У вас есть %d, а затем вы передаете ComplexNum. Вам необходимо изменить:

printf("a + bi = %d + %d%c\n",mynum[0],mynum[1],imaginary);

до:

printf("a + bi = %d + %d%c\n",mynum.a,mynum.b,imaginary);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...