首先,我想跟大家打个招呼!
我是一名自学成才的初学程序员,从C开始,并开始非常喜欢这个。
今天我在我的一个测试程序中偶然发现了一些非常有趣和有趣的东西:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NUMBERS 6
#define BALLS 6
int main()
{
int x, y, z, numbers[BALLS];
for (x = 0; x < BALLS; x++)
numbers[x] = -1;
srand((unsigned)time(NULL));
puts("\t\tTHE AMAZING LOTTERY\n\n");
printf("Have you ever won at a lottery?\n");
printf("You can try your luck now! %c\n\n" , 2);
printf("Quick, write down 6 numbers and then press \"Enter\"");
getchar();
for (y = 0; y < BALLS; y++)
{
/* This is the intriguing part*/
printf("%d\n", y);
label:
z = rand() % NUMBERS+1;
for (y = 0; y < BALLS; y++)
{
if (z == numbers[y])
goto label;
else if (numbers[y] != -1)
continue;
else
{
numbers[y] = z;
break;
}
}
}
printf("\n\nToday's numbers are %c\a ", 16);
for (x = 0; x < BALLS; x++)
printf("%d, ", numbers[x]);
printf("\n\n\nWell...\n\t..tough luck buddy..");
printf("\n\n\n\tMaybe next time.. %c" , 15);
putchar('\n');
getchar();
return 0;
}
尝试了3种不同的编译器,c4droid,code :: blocks和在线编译器。同样有趣的结果。 为什么只声明一次但在2个嵌套循环中使用的相同变量(y)可以保持不同的值而不会导致任何问题?
我不认为这是推荐的做法,但是......怎么会有效?
答案 0 :(得分:1)
你的代码有点复杂。它不应该像你说的那样工作,除非你在#34; for(int y = 0; ...)&#34;中定义循环变量。写一个简单的代码并测试它:
int i = 0;
for (i = 0; i < 5; i++) {
printf("in first loop with i = %d\n",i);
for (i = 0; i < 2; i++) {
printf("in second loop with i = %d\n",i);
}
}