您的位置:

c语言各科成绩输出乱码是为什么,c语言printf输出乱码

本文目录一览:

C语言问题,为什么输出总是乱码

看一眼就知道。。乱码是因为你的指针没有赋NULL,是野指针,指向了不明区域,所以会出现乱码,以后定义指针最好int

*a

=

NULL;这样子

为什么C语言输出文件内容乱码

这种文本文件,不能直接使用读到结构的方法。因为结构里会有非文本的控制符,比如字符串结束符'\0'。

一般使用直接读到结构的方法,只限于二进制格式的文件,并且最好是读自己创建的文件,别人创建的,格式刚刚好合适创建结构的也很少。

你这个乱码,你的文件里,学号长度为10个字节,所以你定义学号这个变量时,必须定义11个字节的长度,因为字符串的变量,必须要有一个'\0'作为结束,不然的话,显示的时候,没有结束符就会接着往下显示,就会有乱码出现。

如果仅仅是这三行的话,倒也能使用结构来读,比如结构里定义num[11],读完后执行一下num[10] = '\0';给它补一个结束符。但如果有人叫“王老四”,名字有的是2个字,有的是3个字这样,你这个就不好判断了。

这种文本,最好是使用fscanf("%s %s %s %s %s", num, name, sex, date, major)的形式来读取。每次读取一行。(注意字符串定义变量时,长度一定要多加1位)。

c语言输出字符串为什么是乱码?

你几个地方写错了,我在里面有注释,分别有:

1、赋值地方,应该是a[i][j],这里i、j代表第几个,你用student这些固定值,一看就知道错了不是吗?而且这是个非常严重的错误,a[i][j]这里面i不能等于student,j不能等于subiects,你们下标取值0到student-1,你自己写完看看都知道错了

2、sum每次循环前要赋0,否则会把前一个学生的成绩加进去

3、ave=sum*1.0/4,不乘1.0的话,系统会把sum/4当成一个整型,会造成结果不正确

#include

#define subiects 3 //学科数量

#define students 4 //学生人数

int main(void)

{

int a[students][subiects] = { 53,54,76,87,89,56,76,85,45,75,76,45 };

int i = 0, j = 0, sum = 0;//sum为总分

double ave;//ave为平均值

//输入成绩

for (i = 0; i students; i++)

{

printf("请输入学生%d的%d科成绩:", i + 1, subiects);//i+1为学生序号

for (j = 0; j subiects; j++)

{

scanf("%d", a[i][j]);//students=4,subiects=3,你觉得a[4][3]赋值是赋给谁?下面同样错误

}

}

//输出成绩

printf("\t\tC语言\t大英\t高数\t总分\t平均分\n");

for (i = 0; i students; i++)

{

sum=0;//每次都要赋0,否则会把前面同学成绩加进去

printf("\t同学%d", i+1);

for (j = 0; j subiects; j++)

{

sum += a[i][j];//错误

printf("\t%d", a[i][j]);//错误

}

ave = sum*1.0 / subiects;

printf("\t%d\t%.2f\n",sum,ave);

}

printf("\n\n");

//颠倒输出

sum = 0;

ave = 0;

printf("\t");

for (i = 0; i students; i++)

printf("\t同学%d", i + 1);

printf("\t平均分\n");

for (j = 0; j subiects; j++)

{

if (j == 0)

printf("\tC语言");

if (j == 1)

printf("\t大英");

if (j == 2)

printf("\t高数");

sum=0;//赋0

for (i = 0; i students; i++)

{

sum += a[i][j];//错误

printf("\t%d", a[i][j]);//错误

}

ave = sum*1.0 / students;

printf("\t%.2f\n",ave);

}

return 0;

}

c语言的这个C程序 为什么输出的是乱码?

主要错误有三个,第一:后面所有的a[students][subiects]变成a[i][j]

在计算每个同学的总分和平均分的时候要将sum的初值设置为0吧

在计算平均分的时候,你的语句是ave = sum / students;ave = sum / subiects

这个是不对的,应改为,ave =1.0* sum / students,ave =1.0* sum / subiects原因在于 假设sum=7,students=3,则ave=7/3=2,而实际想要的结果为2.3333

#includestdio.h

#define subiects 3  //学科数量

#define students 4  //学生人数

int main(void)

{

int a[students][subiects] = { 53,54,76,87,89,56,76,85,45,75,76,45 };

int i = 0, j = 0, sum = 0;//sum为总分

double ave;//ave为平均值

//输入成绩

for (i = 0; i  students; i++)

{

printf("请输入学生%d的%d科成绩:", i + 1, subiects);//i+1为学生序号

for (j = 0; j  subiects; j++)

{

scanf("%d", a[i][j]);

}

}

//输出成绩

printf("\t\tC语言\t大英\t高数\t总分\t平均分\n");

for (i = 0; i  students; i++)

{    sum=0;

printf("\t同学%d", i+1);

for (j = 0; j  subiects; j++)

{

sum += a[i][j];

printf("\t%d", a[i][j]);

}

ave = 1.0*sum / subiects;

printf("\t%d\t%.2f\n",sum,ave);

}

printf("\n\n");

//颠倒输出

sum = 0;

ave = 0;

printf("\t");

for (i = 0; i  students; i++)

printf("\t同学%d", i + 1);

printf("\t平均分\n");

for (j = 0; j  subiects; j++)

{

if (j == 0)

printf("\tC语言");

if (j == 1)

printf("\t大英");

if (j == 2)

printf("\t高数");

        sum=0;

for (i = 0; i  students; i++)

{

sum += a[i][j];

printf("\t%d", a[i][j]);

}

ave = 1.0*sum / students;

printf("\t%.2f\n",ave);

}

return 0;

}

C语言各科成绩输出乱码是为什么,前面的计算函数都运行正常的,,,

void output(struct student stu[], int m, int n)

{

int i, j;

printf("**名次****学号****姓名****总分********各科成绩*********");

for (i = 0; im; i++)

{

stu[i].p = i + 1;

printf("\n%3d %8d %6s %4d ", stu[i].p, stu[i].num, stu[i].name, stu[i].total);

for (j = 0; jn; j++)

{

printf("%3d", stu[i].score[j]); // 只能有一个%3d

}

printf("\n");

}

}