пытаясь сканировать строки на 2 различных элемента структуры в C - PullRequest
0 голосов
/ 26 апреля 2018

Я попытался отсканировать 2 разные строки на 2 разных элемента одной и той же структуры, и я не знаю, почему он не работает.

Это мой код:

struct qRegStudents{
  char studID[6];
  char studName[25];
};

typedef struct qRegStudents students;

int RegStudent() {
  students Student;
  char temp[6];

  printf("Enter ID Number: ");
  scanf(" %6s",Student.studID);
  printf("Enter Name: ");
  scanf(" %25s",Student.studName);

  printf("%s",Student.studID);

  return 0;
}

Я ввожу идентификатор студента как «123456», а затем имя как «Джош». Он печатает "123456josh" как просто идентификатор студента

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

ваша программа имеет неопределенное поведение, поскольку нет места в памяти, которое вы сохранили для '\0' в конце studID и studName. Выделите достаточно места в памяти.

сделай как

struct qRegStudents{
        char studID[7]; /* plus 1 for terminating \0 char at end */
        char studName[26];
};

Также выполните fflush(stdout) для очистки stdout потока или используйте \n. например,

printf("%s\n",Student.studID);
printf("%s\n",Student.studName);

Всегда компилируйте ваш код с флагами включения предупреждения. Например, флаг -Wall. Он расскажет вам что-нибудь о неиспользованной переменной (temp[6]), прочитайте ее.

0 голосов
/ 26 апреля 2018

В поле studID недостаточно места для размещения 6 символов плюс нулевой терминатор. Измените определение на:

struct qRegStudents{
    char studID[7];
    char studName[25];
};

Редактировать ... Лучше всего включить \n в конец строки printf, чтобы убедиться, что она сбрасывается в стандартный вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...