字符串使用前请使用清空语句把垃圾内存清理成'\0',也就是0x00(0):\x0d\memset(str2, 0x00, sizeof(str2));\x0d\当然,也可以在声明的时候进行初始化:\x0d\char str2[20] = {0};\x0d\这句也能实现同样的效果。这是C语言习惯,务必养成!\x0d\'\0'是字符串结束符,每当解释器看到这'\0'才会认为字符串终止,而你的
程序明显没有字符串结束符,所以连同垃圾内存一起读出来了。“烫烫。。”等就是垃圾内存。\x0d\不明白欢迎追问
发你的代码看看
max与min没有初始化
还有就是for语句后多了一个分号
修改后的代码如下:
#include<stdioh>
main()
{
int max,min,n,m,i;
printf("输入n:");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
printf("输入第%d个数:", i);
scanf("%d", &m);
if (i==1)
{
max=min=m;
}
else if(m>max)
{
max=m;
}
else if(m<min)
{
min=m;
}
} printf("max=%d\nmin=%d",max,min);
}
完全没看懂你的程序。
有明显的几个奇怪的地方。
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型数据。
评论列表(0条)