c语言打印代码_c语言 我的代码为什么执行后没打印任何东西

原问题:c语言 我的代码为什么执行后没打印任何东西
分类:编程开发 > 最后更新时间:【2016-12-14 22:01:24】
问题补充:

#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循环完全删除。

最佳答案由网友  grass_rt  提供
公告: 为响应国家净网行动,部分内容已经删除,感谢网友理解。
9

分享到:

其他回答

其它网友回答:
n = n++;

其它网友回答:
这句,执行完n++之后,又把原来的n的值赋值给n,所以n的值一直为0,造成死循环了,应该改为

其它网友回答:
n++;

其它网友回答:
p = (int*)malloc(sizeof(int));这句少写了个*7?如果不是死循环了程序估计会崩溃

其它网友回答:
应该是打印了之后很快就关闭了的,加上显示停留的语句


追问:
system("pause");这个就是停留语句呀, 而且窗口没有关闭,只是没显示东西
    推荐