我正在编写一个需要的C ++程序:
使用以下参数声明名为Student
的结构:
- Student ID
- Lastname
- Student marks
[学校科目k:1
我还需要编写函数来插入和显示每个学生。
但该程序不起作用。没有错误所以我认为语法是正确的,因为它编译。
你能帮我找一下代码中的错误吗?
#include <iostream>
using namespace std;
struct Student
{
int FN;
char Lastname[32];
double marks[10];
};
//y = Number of school subjects;
void decStudent(Student x, int y)
{
cout << "Insert student ID: ";
cin >> x.FN;
cout << "Insert student lastname: ";
cin >> x.Lastname;
cout << "Insert student marks: ";
for ( int i=0; i < y; i++)
{
cin >> x.marks[y];
cout << endl;
}
cout << "------------------------------------" << endl;
}
//v = Number of students;
//t = Number of school subjects;
void BookOut(Student x, int v, int t)
{
double StudentAvarage = 0;
cout << x.FN << " " << x.Lastname << " ";
for (int j = 0; j < t; j++)
{
cout << x.marks[j] << " ";
StudentAvarage = StudentAvarage + x.marks[j];
}
StudentAvarage = StudentAvarage / t;
cout << StudentAvarage;
}
int main()
{
int num, k;
Student book[100];
cout << "Please insert the number of students: ";
cin >> num;
cout << "Please insert the amount of school subjects: ";
cin >> k;
for (int i = 0; i < num; i++)
{
decStudent(book[i], k);
}
for (int i = 0; i < num; i++)
{
cout << " ID " << "Lastname";
for (int p = 0; p < k; p++)
{
cout << " Mark" << p << " ";
}
cout << " Avarage mark ";
BookOut(book[i], num, k);
}
return 0;
}
答案 0 :(得分:2)
您的问题与正确传递参数有关,而且与结构很少有关。
void decStudent(Student x, int y)
因此,当您传递学生时,该函数会生成local copy
。当decStudent()函数返回时,该本地副本将被销毁。这与此无异:
void foo(int x)
{
x = 10;
}
int main()
{
int num = 0;
foo(num);
}
同样的行为。调用foo后,“num”不会更改为10,因为int是按值传递的。
您需要通过引用传递,而不是通过值传递。
void decStudent(Student& x, int y)
答案 1 :(得分:0)
答案 2 :(得分:0)
我最好的猜测是你在调试自己时付出的努力,就是你在所有情况下都要通过值void函数。因此,一旦退出该功能,您所做的任何更改都不会保留。这与结构无关。
答案 3 :(得分:0)
更改您的功能原型。 而不是按值传递使用传递引用。 pass by value创建一个临时变量,如果你改变那个临时变量的值,那么值的变化就不会反映在你传递的值中。
使用void decStudent(Student&amp; x,int y) 而不是void decStudent(Student x,int y)