各位大佬能帮我看看下面代码哪出问题了吗?会有点长。问题:彩票只能机选,还只能一次,第二次就卡住了

xiaomuyusg 2024-02-16 09:29:19
#include<bits/stdc++.h>
#include<windows.h>
float cd,money=0,p,xz,qk;//cd存档   money钱   xz选择  p for里面用  qk欠款
float a[6],n[6]={},zj,jxzx,www=0,wwww=0,zjhm,cpsl;//彩票   zj中奖金额  cpsl彩票数量  zjhm中奖号码 
int f(){
	int a;
	a=rand();
	a=a%18+1;
	return a;
}
using namespace std;
int main(){
	cout<<"选择你的存档(1~8):"; 
	cin>>cd;
	system("cls");
	if(cd==1)freopen("1.txt","r",stdin);
	if(cd==2)freopen("2.txt","r",stdin);
	if(cd==3)freopen("3.txt","r",stdin);
	if(cd==4)freopen("4.txt","r",stdin);
	if(cd==5)freopen("5.txt","r",stdin);
	if(cd==6)freopen("6.txt","r",stdin);
	if(cd==7)freopen("7.txt","r",stdin);
	if(cd==8)freopen("8.txt","r",stdin);
	cin>>money;
	freopen("CON", "r", stdin);
	cout<<"你的余额为:"<<money<<endl;
	Sleep(1500);
	system("cls");
	for(p=0;p>=0;p++){
		cout<<"当前余额:"<<money<<endl<<"买彩票:1"<<endl<<"借钱:2"<<endl;
        cout<<"问答:3"<<endl<<"投资:4"<<endl<<"退出游戏:5"<<endl; 
		scanf("%f",&xz);
		if(xz==1){
			system("cls");
			cout<<"机选/自选(0/1):"<<endl;
			scanf("%f",&jxzx);
			system("cls");
			if(jxzx==0){
				n[0]=f();
				n[1]=f();
				for(int i=0;i>=0;i++){
					if(n[1]==n[0])n[1]=f();
					else break;
				}
				n[2]=f();
				for(int i=0;i>=0;i++){
					if(n[2]==n[0])n[1]=f();
					else{
						if(n[2]==n[1])n[1]=f();
						else break;
					}
				}
				n[3]=f();
				for(int i=0;i>=0;i++){
					if(n[3]==n[0])n[1]=f();
					else{
						if(n[3]==n[1])n[3]=f();
						else{
							if(n[3]==n[2])n[3]=f();
							else break;
						}
					}
				}
				n[4]=f();
				for(int i=0;i>=0;i++){
					if(n[4]==n[0])n[4]=f();
					else{
						if(n[4]==n[1])n[4]=f();
						else{
							if(n[4]==n[2])n[4]=f();
							else{
								if(n[4]==n[3])n[4]=f();
								else break;
							}
						}
					}
				}
				n[5]=f();
				for(int i=0;i>=0;i++){
					if(n[5]==n[0])n[5]=f();
					else{
						if(n[5]==n[1])n[5]=f();
						else{
							if(n[5]==n[2])n[5]=f();
							else{
								if(n[5]==n[3])n[5]=f();
								else{
									if(n[5]==n[4])n[5]=f();
									else break;
								}
							}
						}
					}
				}
				cout<<"你的号码是(1~18):"<<n[0]<<" "<<n[1]<<" "<<n[2]<<" "<<n[3]<<" "<<n[4]<<" "<<n[5]<<endl<<"你要几张?(2元/张)";
				scanf("%f/n",&cpsl);
				if(money<cpsl){
					cout<<"余额不足!";
					cpsl=0;
				}
				www=0;
				wwww=0;
				a[0]=f();
				a[1]=f();
				for(int i=0;i>=0;i++){
					if(a[1]==a[0])a[1]=f();
					else break;
				}
				a[2]=f();
				for(int i=0;i>=0;i++){
					if(a[2]==a[0])a[1]=f();
					else{
						if(a[2]==a[1])a[1]=f();
						else break;
					}
				}
				a[3]=f();
				for(int i=0;i>=0;i++){
					if(a[3]==a[0])a[1]=f();
					else{
						if(a[3]==a[1])a[3]=f();
						else{
							if(a[3]==a[2])a[3]=f();
							else break;
						}
					}
				}
				a[4]=f();
				for(int i=0;i>=0;i++){
					if(a[4]==a[0])a[4]=f();
					else{
						if(a[4]==a[1])a[4]=f();
						else{
							if(a[4]==a[2])a[4]=f();
							else{
								if(a[4]==a[3])a[4]=f();
								else break;
							}
						}
					}
				}
				a[5]=f();
				for(int i=0;i>=0;i++){
					if(a[5]==a[0])a[5]=f();
					else{
						if(a[5]==a[1])a[5]=f();
						else{
							if(a[5]==a[2])a[5]=f();
							else{
								if(a[5]==a[3])a[5]=f();
								else{
									if(a[5]==a[4])a[5]=f();
									else break;
								}
							}
						}
					}
				}
                for(int i=0;i<5;i++){
                    for(int j=0;j<5;j++)if(a[i]===n[j])zjhm++;
                }
				system("cls");
				if(zjhm==0)cout<<"没中奖";
				if(zjhm==1){
					cout<<"恭喜你中了"<<5*cpsl;
					money+=5*cpsl; 
				}
				if(zjhm==2){
					cout<<cout<<"恭喜你中了"<<10*cpsl; 
					money+=10*cpsl;
				}
				if(zjhm==3){
					cout<<cout<<"恭喜你中了"<<50*cpsl; 
					money+=50*cpsl;
				}
				if(zjhm==4){
					cout<<cout<<"恭喜你中了"<<100*cpsl; 
					money+=100*cpsl;
				}
				if(zjhm==5){
					cout<<cout<<"恭喜你中了"<<300*cpsl; 
					money+=300*cpsl;
				}
				if(zjhm==6){
					cout<<cout<<"恭喜你中了"<<500*cpsl; 
					money+=500*cpsl;
				}
				Sleep(1200); //彩票   zj中奖金额  cpsl彩票数量  zjhm中奖号码 
				system("cls");
				money-=cpsl*2;
				n[0]=0;
				n[1]=0;
				n[2]=0;
				n[3]=0;
				n[4]=0;
				n[5]=0;
				zj=0;
				cpsl=0;
				zjhm=0;
			}
			if(jxzx==1){
				cout<<"你的号码(1~18,不同):";
				scanf("%f,%f,%f,%f,%f,%f/n",&n[0],&n[1],&n[2],&n[3],&n[4],&n[5]);
				cout<<"你要几张?(2元/张)";
				cpsl=0;
				scanf("%f",&cpsl);
				if(money<cpsl){
					cout<<"余额不足!";
					cpsl=0;
				}
				a[0]=f();
				a[1]=f();
				for(int i=0;i>=0;i++){
					if(a[1]==a[0])a[1]=f();
					else break;
				}
				a[2]=f();
				for(int i=0;i>=0;i++){
					if(a[2]==a[0])a[1]=f();
					else{
						if(a[2]==a[1])a[1]=f();
						else break;
					}
				}
				a[3]=f();
				for(int i=0;i>=0;i++){
					if(a[3]==a[0])a[1]=f();
					else{
						if(a[3]==a[1])a[3]=f();
						else{
							if(a[3]==a[2])a[3]=f();
							else break;
						}
					}
				}
				a[4]=f();
				for(int i=0;i>=0;i++){
					if(a[4]==a[0])a[4]=f();
					else{
						if(a[4]==a[1])a[4]=f();
						else{
							if(a[4]==a[2])a[4]=f();
							else{
								if(a[4]==a[3])a[4]=f();
								else break;
							}
						}
					}
				}
				a[5]=f();
				for(int i=0;i>=0;i++){
					if(a[5]==a[0])a[5]=f();
					else{
						if(a[5]==a[1])a[5]=f();
						else{
							if(a[5]==a[2])a[5]=f();
							else{
								if(a[5]==a[3])a[5]=f();
								else{
									if(a[5]==a[4])a[5]=f();
									else break;
								}
							}
						}
					}
				}
				for(int i=0;i<5;i++){
					for(int j=0;j<5;j++){
						if(n[j]==a[j])zjhm++;
					}
				}
                for(int i=0;i<5;i++){
                    for(int j=0;j<5;j++)if(a[i]===n[j])zjhm++;
                }
				system("cls");
				if(zjhm==0)cout<<"没中奖";
				if(zjhm==1){
					cout<<"恭喜你中了"<<5*cpsl;
					money+=5*cpsl; 
				}
				if(zjhm==2){
					cout<<cout<<"恭喜你中了"<<10*cpsl; 
					money+=10*cpsl;
				}
				if(zjhm==3){
					cout<<cout<<"恭喜你中了"<<50*cpsl; 
					money+=50*cpsl;
				}
				if(zjhm==4){
					cout<<cout<<"恭喜你中了"<<100*cpsl; 
					money+=100*cpsl;
				}
				if(zjhm==5){
					cout<<cout<<"恭喜你中了"<<300*cpsl; 
					money+=300*cpsl;
				}
				if(zjhm==6){
					cout<<cout<<"恭喜你中了"<<500*cpsl; 
					money+=500*cpsl;
				}
				Sleep(1200); //彩票   zj中奖金额  cpsl彩票数量  zjhm中奖号码 
				system("cls");
				money-=cpsl*2;
				n[0]=0;
				n[1]=0;
				n[2]=0;
				n[3]=0;
				n[4]=0;
				n[5]=0;
				zj=0;
				cpsl=0;
				zjhm=0;
			}
		}
		if(xz==2){
			system("cls");
			cout<<"你要借多少?"<<endl; 
			scanf("%f",&qk);
			money+=qk;
			qk+=0.2*qk; 
			system("cls");
		}
		if(xz==3);
		if(xz==4);
		if(xz==5){
			if(cd==1)freopen("1.txt","w",stdout);
			if(cd==2)freopen("2.txt","w",stdout);
			if(cd==3)freopen("3.txt","w",stdout);
			if(cd==4)freopen("4.txt","w",stdout);
			if(cd==5)freopen("5.txt","w",stdout);
			if(cd==6)freopen("6.txt","w",stdout);
			if(cd==7)freopen("7.txt","w",stdout);
			if(cd==8)freopen("8.txt","w",stdout);
			cout<<money-qk;
			return 0;
		} 
	}
}

 

...全文
3313 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复 1

解决了“彩票只能机选,还只能一次,第二次就卡住了”这个问题,错误在下面的代码里:


a[3]=f();
                for(int i=0;i>=0;i++){
                    if(a[3]==a[0])a[1]=f();//a[1]改成a[3]
                    else{
                        if(a[3]==a[1])a[3]=f();
                        else{
                            if(a[3]==a[2])a[3]=f();
                            else break;
                        }
                    }
                }

a[3]重复了,所以要再随机一个a[3]而不是a[1]。运行结果如下:

img

xiaomuyusg 02-16
  • 举报
回复
@太空漫步11 谢谢
  • 打赏
  • 举报
回复

首先,你的代码中有一个明显的错误:

if (jxzx == 0) {
  n[0] = f();
  n[1] = f();
  for (int i = 0; i >= 0; i++) {
    if (n[1] == n[0]) n[1] = f();
    else break;
  }
  n[2] = f();
  for (int i = 0; i >= 0; i++) {
    if (n[2] == n[0]) n[1] = f();
    else {
      if (n[2] == n[1]) n[1] = f();
      else break;
    }
  }
  n[3] = f();
  for (int i = 0; i >= 0; i++) {
    if (n[3] == n[0]) n[1] = f();
    else {
      if (n[3] == n[1]) n[3] = f();
      else {
        if (n[3] == n[2]) n[3] = f();
        else break;
      }
    }
  }
  n[4] = f();
  for (int i = 0; i >= 0; i++) {
    if (n[4] == n[0]) n[4] = f();
    else {
      if (n[4] == n[1]) n[4] = f();
      else {
        if (n[4] == n[2]) n[4] = f();
        else {
          if (n[4] == n[3]) n[4] = f();
          else break;
        }
      }
    }
  }
  n[5] = f();
  for (int i = 0; i >= 0; i++) {
    if (n[5] == n[0]) n[5] = f();
    else {
      if (n[5] == n[1]) n[5] = f();
      else {
        if (n[5] == n[2]) n[5] = f();
        else {
          if (n[5] == n[3]) n[5] = f();
          else {
            if (n[5] == n[4]) n[5] = f();
            else break;
          }
        }
      }
    }
  }

这段代码用于生成6个随机号码,但由于循环条件i >= 0永远为真,因此循环会一直执行下去,导致程序卡住。

解决方案:

将循环条件改为i < 6,即:

for (int i = 0; i < 6; i++) {
  // ...
}

此外,你的代码中还有一些其他可以改进的地方:

可以使用std::vector来存储号码,这样可以避免使用循环来判断号码是否重复。
可以使用std::random_shuffle函数来随机排列号码,这样可以避免每次都使用相同的随机数生成器。
可以使用std::cout来输出信息,这样可以避免使用system("cls")函数来清除屏幕。
改进后的代码:

#include <bits/stdc++.h>

int main() {
  float money = 0, p, xz, qk;
  float a[6], n[6] = {}, zj, jxzx, www = 0, wwww = 0, zjhm, cpsl;

  std::vector<int> numbers;
  for (int i = 1; i <= 18; i++) {
    numbers.push_back(i);
  }

  while (true) {
    std::cout << "当前余额:" << money << std::endl
              << "买彩票:1" << std::endl
              << "借钱:2" << std::endl;
    std::cout << "问答:3" << std::endl
              << "投资:4" << std::endl
              << "退出游戏:5" << std::endl;
    std::cin >> xz;

    if (xz == 1) {
      std::random_shuffle(numbers.begin(), numbers.end());
      for (int i = 0; i <
xiaomuyusg 02-16
  • 举报
回复
@清水白石008 可是我用了break,那段没错的。

69,361

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧