Проблема заключается в том, что при вводе структурных переменных после некоторых вводов он не печатает операторы ввода и случайным образом назначает ввод переменной. - PullRequest
0 голосов
/ 04 сентября 2018
#include <stdio.h>
#include<stdlib.h>

struct complex {
  int real;
  int img;
} s1[2], s2;

int main() {
  int n;
  printf("\t******MAIN MENU*******\n");
  printf(
      "1-Read Complex number\n2-Display Complex number\n3-Add\n4-Subtract\n5-EXIT\n");

  while (1) {
    printf("Enter your choice \n");
    scanf("%d", &n);
    switch (n) {
      case 1:
        for (int i = 0; i < 2; i++) {
          printf("Enter real and imaginary parts of complex number %d \n",
              i + 1);
          scanf("%d ", &s1[i].real);
          scanf("%d ", &s1[i].img);
        }
        break;
      case 2:
        for (int j = 0; j < 2; j++) {
          printf("Complex number %d = ", j + 1);
          printf("%d + %di\n", s1[j].real, s1[j].img);
        }
        break;
      case 3:
        printf("The sum of two Complex Numbers Are = ");
        s2.real = s1[0].real + s1[1].real;
        s2.img = s1[0].img + s1[1].img;
        printf("%d + %di\n", s2.real, s2.img);
        break;
      case 4:
        printf("The difference of two Complex Numbers Are = ");
        s2.real = s1[0].real - s1[1].real;
        s2.img = s1[0].img - s1[1].img;
        printf("%d + %di", s2.real, s2.img);
        break;
      case 5:
        exit(0);
      default:
        printf("\n Wrong choice \n");
    }
  }
  return 0;
}

1 Ответ

0 голосов
/ 04 сентября 2018

Когда вы читаете части комплексного числа:

      scanf("%d ", &s1[i].real);
      scanf("%d ", &s1[i].img);

Спецификатор формата %d ожидает последовательность цифр. Проблема в том, что после того, как он использует любое количество пробельных символов, остается место. После ввода цифры и нажатия клавиши ВВОД scanf не вернется, пока не будет введен какой-либо непробельный символ, т. Е. Следующий номер, который вы намереваетесь набрать.

Избавиться от конечного пробела в строке формата:

      scanf("%d", &s1[i].real);
      scanf("%d", &s1[i].img);
...