Jill Pine Ответов: 2

Как я могу вводить и хранить информацию в функциях и структуре?


У меня есть задание, и я все еще новичок.
У меня есть проблема с тем, чтобы иметь возможность вводить данные одного студента и отображать их, используя только функции (вызовы функций, прототипы и определения) в основной функции.
Я пытался это сделать, но то, что происходит на экране во время выполнения, имеет слово null там, где оно должно быть.
Пожалуйста помочь.

Что я уже пробовал:

Выполнение функций и даже предшествование функциям и выполнение всего в основной функции, но все равно есть null во время выполнения.
/* The program will have 2 versions of the function used to   *
 * input student records: getStudentV1() and getStudentV2().  *
 *                                                            * 
 * Function displayStud() will display information of 1       *
 * student record in 1 horizontal line.                       *
 * Function displayHeader() is called before displayStud() is *
 * called.                                                    *
 **************************************************************/

#include <stdio.h>
#include <string.h>

typedef struct {
	char fname[24];     /* firstname */
	char lname[16];     /* lastname  */ 
	char mi;            /* middle initial */ 
}nametype;

typedef struct {
	nametype name;
	unsigned int ID;
	char course[8];
	int yrLevel;
}studtype;

studtype getStudentV1();        
void getStudentV2(studtype *S); 
void displayHeader();          
void displayStud(studtype S);     

int main()
{

  getStudentV1();
  displayHeader();
  displayStud(student);

  return 0;
}


void displayHeader()
{
  printf("\n%-10s", "ID");   
}

void getStudentV1(){
  printf("Enter student ID Number: \n);
  scanf("%d", &student.ID);

void displayStud(studtype S){
	
  studtype student;
  printf("\n%-10s", student.ID);
}

phil.o

Пожалуйста, используйте зеленый виджет "улучшить вопрос" и квалифицируйте раздел "Что я пробовал" с кодом, вызывающим проблему.

phil.o

Какая - то часть кода, по-видимому, отсутствует в вашем образце (в getStudentV1() функция. Не могли бы вы это исправить, пожалуйста? А в конце строки отсутствует двойная кавычка. printf() функции в нем.

2 Ответов

Рейтинг:
0

Richard MacCutchan

void getStudentV1(){
  printf("Enter student ID Number: \n);
  scanf("%d", &student.ID); // you refer to student.ID but there is no variable student declared anywhere.

void displayStud(studtype S){ // you pass in a structure named S but never refer to it
	
  studtype student; // you are creating a local student structure which will disappear when this function returns.
  printf("\n%-10s", student.ID); // the local student structure does not contain any information
}


Вы должны создать свои структурные переменные в main и передать указатели на них своим функциям; что-то вроде:
int main()
{
    studtype student;

    getStudentV1(&student);
    displayHeader(&student);
    displayStud(&student);

  return 0;
}

void getStudentV1(studtype *student)
{
    // you can now refer to the individual fields
    // using 'arrow' notation thus:
    scanf("%d", &student->ID);

    // use similar references to collect the other details
    // but you will need to use both 'arrow' and 'dot' when
    // collecting the name fields:
   //        student->name.fname
}


CPallini

5.

Richard MacCutchan

Спасибо, Карло.

Рейтинг:
0

KarstenK

Решение 1 является правильным, но если вы хотите сохранить больше информации, вам нужно выделить немного памяти.

 int studentCount = 10;//or ask the user
//allocate memory for the students
studtype *students = new studtype[studentCount];

 //loop and work with students
for( int i = 0; i < studentCount; i++ ){
//use a single student
studtype *student = students[i];
}

delete students; // free the memory
Это имеет то преимущество, что вы можете использовать некоторых студентов в своем коде. Посетите сайт Изучите учебник по C++ к вопросу о языке и его использовании.

Научитесь использовать отладчик. Удачи :-)