简单的c++问题,帮我看看这代码?

2025-03-09 21:08:28
推荐回答(5个)
回答1:

char xue[5];//你这成员大小设的太极限了,学号5个数,你就给5个位置,在内存允许的情况下,数组的长度越大越好,防止数组越界;你这可能就是数组越界了,我把数组长度增大后,输出正常;

char ming[10];//这也太极限了;下同

int fen[3];

个人建议,在内存允许的情况下,数组长度尽量设的大一些;防止数组越界;

回答2:

这里xue[5]的5设置有问题,char读取最后都有一个\n,所以至少需要多设置1个位置,后边的ming[10]设置就刚刚好。不过建议实际操作的时候都设大一点。
所以只要将xue[5]这里的5改为比5大的数字,比如6就ok了。

或者,把char改为string类就没这个问题了,只是需要注意在前边加上#include,代码测试通过,如下:
#include
#include
#include
#include
using namespace std;

int main(){
int n;
cin>>n;
struct student {
string xue;
string ming;
int fen[3];
}s[n];
int zong,x=0;
int m=1;
for(int i=0;i<5;i++){
cin>>s[i].xue>>s[i].ming >>s[i].fen[0]>>s[i].fen[1]>>s[i].fen[2];
zong=s[i].fen[0]+s[i].fen[1]+s[i].fen[2];
if(zong>x){
x=zong;
m=i;
}
}
cout<}

回答3:

主要是xue[5]那里出错了,字符串必须留一个放结束符(‘\0’),你输入了5个字符,没有空间放字符串结束符,所以应该改为xue[6],这么解释应该简单易懂了吧

回答4:

#include
#define N 50

using namespace std;

int main() {
struct student {
char xue[5];
char ming[10];
int fen[3];
int total;
}s[N];
int max = 0,m,x = 0;
for(int i = 0;i < 5;i++) {
cin >> s[i].xue >> s[i].ming >> s[i].fen[0] >> s[i].fen[1] >> s[i].fen[2];
s[i].total = s[i].fen[0] + s[i].fen[1] + s[i].fen[2];
if(max < s[i].total) {
max = s[i].total;
m = i;
}
}
cout << "最高分是:" << max << endl;
return 0;
}

回答5:

从你的代码看,输出的信息应该是这样的形式:
名字 学号 总分
不是这样吗?