本文目录一览:
- 1、C语言问题,为什么输出总是乱码
- 2、为什么C语言输出文件内容乱码
- 3、c语言输出字符串为什么是乱码?
- 4、c语言的这个C程序 为什么输出的是乱码?
- 5、C语言各科成绩输出乱码是为什么,前面的计算函数都运行正常的,,,
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");
}
}