您的位置:

这个c语言为什么乱码了,c语言为什么会出现乱码

本文目录一览:

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型数据。

我的C语言程序运行后为什么是乱码?

有几个小问题:

第一:c语言一般不支持中文,如果你用vc6.0++就是无法打印中文,一定会乱码,建议用英文;

第二:如果你用的c语言编译器支持中文,如devc++,则可以使用中文;

第三:我们的使用的字符格式,最多的是UTF-8,把默认代码页格式改为UTF-8试试吧

希望我的分享对你有用,感谢采纳

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()函数之外

如果帮到你,给个采纳哈~