这是我的任务。
这就是我提出的:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
int r,i,num[0];
srand(time(NULL));
r = rand()%(999-100+1)+100;
printf("Here is the wininng number%d\n",r);
printf("Enter three digit number to win lottery:\n");
scanf("%d",num);
for(i=0;i<3;i++){
if(r==num[0]){
printf("For three exact match you get $100,000\n");
}else if((r/10)==(num[1]/10)){
printf("For two number match you get $50,000\n");
}else if((r%10)==(num[]%10)){
printf("For one number match you get $10,000\n");
}else{
printf("You get nothing!\n");
}}
}
我得到三位数的匹配,并且在编译之后有时间三位数和两位数匹配。告诉我什么是错的。提前谢谢你们。
答案 0 :(得分:0)
出于某种原因,您已声明num[0]
使num
数组的长度为零。
请注意,“中奖号码”实际上不是数字而是数字字符串。
您应该将num
声明为字符数组:
char num[4];
您可以阅读:
scanf("%3s", num)
然后,您需要转换为num[0]
,num[1]
,num[2]
的ASCII字符,以便将它们与随机数字的数字进行比较。
答案 1 :(得分:0)
你的逻辑错了。
通过比较他们输入的内容与您生成的内容(中奖号码),可以找到3位数的完全匹配。
3位排列比较棘手,但您还需要考虑2位和1位排列。我可能会将生成的(获胜)数字转换为字符串,以及用户的数字。然后,您可以逐步查看中奖号码,计算中奖号码中与用户号码中未使用的数字匹配的位数。通过计数,您知道用户赢得了什么(如果有的话)。请注意,当一个数字匹配时,你需要删除它,这样当中奖号码为666而用户输入456时,你不会计算与6匹配的三个数字。
像这样:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int win;
int num;
srand(time(NULL));
win = rand() % (999 - 100 + 1) + 100;
printf("Here is the winning number: %d\n", win);
printf("Enter three digit number to win lottery:\n");
if (scanf("%d", &num) != 1)
return 1;
if (num == win)
printf("For exact match you get $100,000\n");
else if (num < 0 || num > 999)
printf("Your number is out of range - you win nothing\n");
else
{
char win_str[4];
char try_str[4];
sprintf(win_str, "%d", win);
sprintf(try_str, "%d", num);
int match = 0;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (win_str[i] == try_str[j])
{
try_str[j] = 'x';
match++;
break;
}
}
}
switch (match)
{
case 0:
printf("No digits in %.3d match %3d - you win nothing\n", num, win);
break;
case 1:
printf("One digit of %.3d matches %3d - you win $10,000\n", num, win);
break;
case 2:
printf("Two digits of %.3d match %3d - you win $20,000\n", num, win);
break;
case 3:
printf("Three digits of %.3d match %3d - you win $50,000\n", num, win);
break;
default:
printf("The impossible happened (%.3d vs %3d gives %d matches)\n", num, win, match);
break;
}
}
return 0;
}