while循环后获得分段错误

时间:2016-06-14 01:19:45

标签: c

嗨我有一个明天的项目,我想完成,但我卡住了。我是新手,所以不要太苛刻。基本上我希望我的程序询问用户玩了多少个数字。多少钱,在它要求彩票号码然后放入边界,然后它询问用户号码,放入第二个边界然后我想比较其中的2个,如果它们有相同的号码它将添加到' sum'。

#include <stdlib.h>
  int main()
{
int k[20],i;
int k2[12],f;
int numbers,sum,n,l,num;
float money,winnings;
l=0;
sum=0;
printf("How many numbers from 1 to 12?\n");
scanf("%d",&num);
  printf("How much money?\n");
  scanf("%f",&money);
    for (i=0;i<19;i++)
     {printf("Give lottery numbers\n");
        scanf("%d",&k[i]);}
while (l<num){
     printf("Give your numbers\n"); 
     scanf("%d", k2 + f); !!fixed!!
       l++;}
for (f=0;f<num;f++){
  for (i=0;i>19;i++){   !!fixed!!
    if ((k[i])==(k2[f])) !!! and here i think its a mistake. 
{
sum=sum+1;
     }
   }  
 }
printf("You got %d numbers out of %d",sum,num);
   if ((sum=1) && (num=1));
     {winnings=(money*2,5);
        printf("Won %f",winnings);}
   if ((sum=1) && (num=2));
     {winnings=(money*1);
        printf("won %f",winnings);}
   if ((sum=2) && (num=2));
     {winnings=(money*5);
        printf("Won %f",winnings);}
system("pause");}

3 个答案:

答案 0 :(得分:1)

f似乎没有被初始化为任何东西。因此,

scanf("%d",k2[f]);

会导致未定义的行为,并且可能是导致崩溃的原因。

此外,您需要修复缩进。此外,你的循环是一个。您将l初始化为1,然后执行以下循环,其明显目的是读取num个数字:

while (l<num){

所以,例如,如果&#34; 1&#34;因为比较&#34; 1&lt; 1&#34;将是假的。

此代码可能存在其他问题,由于缩进不良而难以对其进行分析。

答案 1 :(得分:1)

此循环

     for (i=0;i=19;i++){

将永远不会结束,因为i = 19将评估为始终为真。

我认为其意图是:

    for (i=0;i<19;i++){ 

答案 2 :(得分:0)

而不是l,你可能想要的是什么,你使用的是f,正如Sam Varshavchik已经发现的那样,它没有被初始化。

此外,您没有传递指向scanf的指针:scanf("%d", k2[f]);。如果您愿意,则需要scanf("%d", k2 + l);scanf("%d", &k2[l])