c语言打印代码_c语言 我的代码为什么执行后没打印任何东西
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
void rands()
{
srand((int)time(NULL));
int*p = NULL;
p = (int*)malloc(sizeof(int));
int n = 0;
while (n<7)
{
p[n] = rand() % 33 + 1;
for (int a = 0; a <n; a++)
{
if (p[n] == p[a])
continue;
n = n++;
}
}
for (int s = 0; s < 7; s++)
{
printf("%d\n",p[s]);
}
free(p);
}
int main()
{
rands();
system("pause");
return EXIT_SUCCESS;
}
最佳答案
另两位朋友的回答有误导之嫌,请题主斟酌。我实现是有点看不下去,所以贸贸然草草写了些东西。为了方便讨论起见,我将题主代码稍作调整后排版如下:

在题主的代码中主要存在下面几处错误:
<第10行>:动态分配的空间不够。
题主需要动态分配一个7个int长的连续空间,但是在代码中却只分配了一个int长度。

应该改为:

<第13行~第20行>: while循环中的for循环语句块,导致程序死循环。

按照现有程序的逻辑,for循环根本无法进入。

这是因为while循环开始执行时,n = 0。for循环的计数变量是a,for循环初始化将a = 0。但是很不幸,for循环的循环条件是a<n。因为0不小于0,所以for循环没有被执行到,进而导致控制while循环的变量n没有机会被修改,所以程序进入了死循环。
由于题主没有说明程序的作用和目的,所以我无法进行更有建设性的修改,只能揣摩大意,勉力而为。修改如下:

修改点有2处:
<1> 为了能够让for循环生效,修改了for循环的循环条件,改为 a <= n;
<2> 为了能够让while循环退出,将n++(题主代码中写的是n = n++)从for循环中移出。
如此修改后问题也随之而来:for循环代码没有对动态空间产生任何修改,对于后续代码而言没有产生任何实质影响,所以理论上可以将for循环完全删除。

其他回答
其它网友回答:
n = n++;
其它网友回答:
这句,执行完n++之后,又把原来的n的值赋值给n,所以n的值一直为0,造成死循环了,应该改为
其它网友回答:
n++;
其它网友回答:
p = (int*)malloc(sizeof(int));这句少写了个*7?如果不是死循环了程序估计会崩溃
其它网友回答:
应该是打印了之后很快就关闭了的,加上显示停留的语句
追问:
system("pause");这个就是停留语句呀, 而且窗口没有关闭,只是没显示东西