本文目录一览:
c语言输出乱码,求解决方法
输出乱码的原因见下图标红的地方:
第一个标红处的for循环语句后面多了分号; 导致下面{}中的语句与for无关
而printf()语句中的i此时等于N,又stu[N]上没有数据,所以会输出乱码;
同理后面输出最高成绩学生时,i的值也为N,因此最后打印stu[i]时也会输出乱码;
我觉得你的本意应该是输出stu[no],所以要将最后printf中的stu[i]都改为stu[no]
但上面用no记录成绩最高学生下标的语句no=i; 应该写在if内,即要如下修改:
if (maxstu[i].ave) {
max=stu[i].ave;
no=i;
}
还要注意max的类型应该为float,no应该赋初值0,因此前面要改为:
float max;
max=stu[0].ave;
no=0;
最后,建议将struct student结构体的定义放在main()函数之外
如果帮到你,给个采纳哈~
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语言程序运行后为什么是乱码?
有几个小问题:
第一:c语言一般不支持中文,如果你用vc6.0++就是无法打印中文,一定会乱码,建议用英文;
第二:如果你用的c语言编译器支持中文,如devc++,则可以使用中文;
第三:我们的使用的字符格式,最多的是UTF-8,把默认代码页格式改为UTF-8试试吧
希望我的分享对你有用,感谢采纳
C语言为什么会出现乱码?
完全没看懂你的程序。
有明显的几个奇怪的地方。
int time = { 1 };
unsigned int k = { 0 };
这两句不符合C语言语法吧,大括号一般很少用的,一般用在数组上,但是你的变量明显不是数组啊。
k = (unsigned int)malloc(sizeof(unsigned int) * time);
malloc函数,返回的是指针吧。你强制转换的不是指针啊,一般没人这么用,没看懂,为什么要强制转换成unsigned int ?应该写错了吧,是 unsinged int *吧。
p = getchar();//
没看懂,这里为什么要getchar,是因为怕有脏东西吗?这里会出问题的,但是代码看不出会发生什么问题。
scanf_s("%d", k, 8);
这里最好改成这样吧,scanf_s("%d", k, sizeof(unsigned int));这样比较安全,反正你要的是int,直接用sizeof,算出int的字节数就可以了,不用自己知道int是多少个字节,这样可以避免出错。
key[i] = { 0 };
这里则是,完全看不懂,因为不知道key是什么,只知道是个key的数组,是什么类型的,完全没懂,只知道初始化为0。
key[i] = k; 这里完全没看懂,只能猜了,循环32次,k是一个int的数,一般是4个字节的数,每个字节是8位,所以一个int是32位,你循环32遍,看起来是想把这个int数,一位一位的输出的样子。但是前面k是用mallco申请,k应该是个指针,不是int变量。直接把指针给一个数组,有点奇怪,所以应该是key[i]=*key;但是看起来,你是要一位一位的数据,而不是一整个int数,但是这里有个问题,我不知道,你是要低位先出,还是高位先出,而且C语言,想要一位一位的数据,要使用,左移和右移指令(这里不是C++,所以没有被C++的std::cout复用于输出,这是个标准C语言的底层操作符,一般嵌入式的用的多,IT用的少,所以一般不常用),所以一位一位的输出应该写成key[i]=(*k)1;或者key[i]=(*k)1,这样是分别是左移一位,右移一位后,把数据给key的数组,这里,要根据你自己的代码要实现的功能,去调整。
printf("%d", key); 我不知道,你是想输出位数据,还是什么。如果想看位数据,应该输出二进制的数不就好了。而不用输出int型数据。