hi, i am new to C/C++ and have just finished a program based on the UKnational lottery, where you enter 6 numbers, six are generated by thecomputer and there are appropriate messages and a compare function to decideyour winnings. I am using Microsoft''s C++ version 6 standard, the programis as follows:/* * * * * * * * * * * * * * * * * * * ** ** Lottery Simulation By Sam Halston ** ** * * * * * * * * * * * * * * * * * * * */#include <stdio.h>#include <stdlib.h>#include <time.h>#define NMAX 6int a[NMAX];int b[NMAX];void getIntArray(int x[]);void bubbleSort(int x[]);void printArrays(int x[], int y[]);void getrandomarray(int x[]);void winnings();int wins = 0;int main(void) {//welcomeprintf("\t Welcome To The National Lottery!\n");printf("\tPlease Enter Six Whole Numbers Between 1 And 49\n\n");getIntArray(a);getrandomarray(b);bubbleSort(a);bubbleSort(b);printf("Your Numbers In Numerical Order Are: \n");printArrays(a, b);winnings();return 0;}void getIntArray(int x[]){int n = 0;int temp;here://I know goto loops are not liked in C, but this is the best way toachieve this feature in my opinion!;do {printf("Choose A Number\n");scanf("%d", &temp);if (temp==0) break;if (n==5){printf("All Six Numbers Have Been Entered, Press Zero To Confirm\n");}if ((temp<01) || (temp>49)){printf("%s\n", "Sorry, That Is An Unacceptable Number. Please Re Enter");goto here;}if (temp==a[0]){printf("%s\n", "Sorry, You Have Already Selected That Number. Please MakeAnother Choice");goto here;}if (temp==a[1]){printf("%s\n", "Sorry, You Have Already Selected That Number. Please MakeAnother Choice");goto here;}if (temp==a[2]){printf("%s\n", "Sorry, You Have Already Selected That Number. Please MakeAnother Choice");goto here;}if (temp==a[3]){printf("%s\n", "Sorry, You Have Already Selected That Number. Please MakeAnother Choice");goto here;}if (temp==a[4]){printf("%s\n", "Sorry, You Have Already Selected That Number. Please MakeAnother Choice");goto here;}if (temp==a[5]){printf("%s\n", "Sorry, You Have Already Selected That Number. Please MakeAnother Choice");goto here;}elsea[n++] = temp;}while (1);}void bubbleSort(int x[])/* It sorts in non-decreasing order the six positions of a. It uses* a technique called the bubble sort method.*/{int lcv;int limit = NMAX-1;int temp;int lastChange;while (limit) {lastChange = 0;for (lcv=0;lcv<limit;lcv++)if (x[lcv]>x[lcv+1]) {temp = x[lcv];x[lcv] = x[lcv+1];x[lcv+1] = temp;lastChange = lcv;}limit = lastChange;}}void printArrays(int x[], int y[])/* These values are printed out, six per line. */{//print user arrayfor (int i=0; i<NMAX;){printf("\t%d ", x[i++]);if (i%6==0)printf("\n");}printf("\n");printf("The Drawn Numbers In Numerical Order Are: \n");//print random arrayfor (i=0; i<NMAX;){printf("\t%d ", y[i++]);if (i%6==0)printf("\n");}printf("\n");}void getrandomarray(int x[]){//make random numberssrand((unsigned int)time((time_t *)NULL));for (int i=0; i<NMAX; i++){x[i] = (rand()%49)+1; //This safety feature makes thegenerator regenerate should anyfor(int j=0; j<i; j++) //of its numbers be the same as previousnumbers.{if(x[i] == x[j])i--;}}}void bubblesort(int x[])/* It sorts in non-decreasing order the first 6 positions of b. It uses* the bubble sort method.*/{int lcv;int limit = NMAX-1;int temp;int lastChange;while (limit){lastChange = 0;for (lcv=0;lcv<limit;lcv++){/* Notice that the values in positions LIMIT+1 .. in* their final position, i.e. they are sorted right */if (a[lcv]>a[lcv+1]){temp = x[lcv];x[lcv] = x[lcv+1];x[lcv+1] = temp;lastChange = lcv;}limit = lastChange;}}}void winnings(){for(int i=0; i<6; i++){for(int j=0; j<6; j++){if(a[i]==b[j]){wins++;}}if(wins==0){printf("You Haven''t Matched Any Numbers, Sorry\n");return;}if(wins==1){printf("You Have Matched One Number, Sorry\n");return;}}if(wins==2){printf("You Have Matched Two Numbers, Sorry\n");return;}if(wins==3){printf("You Have Matched 3 Numbers. Well Done, You Have Won £10\n");return;}if(wins==4){printf("You Have Matched 4 Numbers. Well Done, You Have Won £500\n");return;}if(wins==5){printf("You Have Matched 5 Numbers. Well Done, You Have Won £300,000!\n");return;}if(wins==6){printf("You Have Matched 3 Numbers. Congratulations, You Have Won£5,000,000!!\n");return;}}ok-so i guess its a mess to most of you, it compiles and runs no bother,just doesnt give a correct readout at the end of how many numbers havematched! iv looed at this for 4 days now, seems to me that only one or nonumbers are being matched almost as if its doing a true and false as towhether any numbers match. trouble is, the lottery rules are 0, 1 or 2numbers matched = £0, 3 =£10, 4=£500, 5=£300,000, 6= £5,000,000. any quickfixes or suggestions as to an alternative end will be greatly appreciated,but if i could stick to this structure it would be good as i am trying hardto understand even what i''ve written! did anyone find this or am i justdoomed to not be a programmer!?thanks in advancesam 解决方案you have made a good attempt. The program seems well structured apart fromyour ''goto''. Instead of the goto have your structure do something like:int ValidNums=0;while(1){// get a number// check valid, if valid then ValidNums++if (ValidNums == NMAX-1)break;}but consider a quit option to allow the user to quit gracefully.Also, scanf is not brilliant for getting numbers, try typing a letter andfind out! In C, I used to do scanf("%s"); and then use strtol() tocheck/convert it to a number. However there are better C++ solutions thatsomebody may point out.Hope this helpsAllanAre you happy with the results of that print? Knowing the answer to thatdivides the problem into two major "hunks".I scanned around but didn''t spot anything noteworthy. I suppose there maywell be an answer by the time I post this.<snip> 这篇关于C问题,可能很简单,但我看不到它!的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!