Мой цикл while внутри main() работает не более одного раза?
я пытаюсь решить покерные руки проектов Эйлера. Задача 54 - Проект Эйлера[^]
мой код:
#include<iostream> #include<fstream> std::ifstream infile("poker.txt"); char a[10000][2]; int b=0; using namespace std; void read() { int i; for(i=0;i<=10000;i++) { infile>>a[i][0]>>a[i][1]; } } class play { public: int high1,high2; char p; void display() { for(int i=b;i<b+5;i++) cout<<a[i][0]<<a[i][1]; } void check( int b) { int c[10]; int n=0,temp[2]; int str=0,fl=0,four=0,three=0,two=0; for(int i=b;i<(5+b);i++) { if(isdigit(a[i][0])) c[i]=(int)a[i][0]-'0'; else if(a[i][0]=='T') c[i]=10; else if(a[i][0]=='J') c[i]=11; else if(a[i][0]=='Q') c[i]=12; else if(a[i][0]=='K') c[i]=13; else if(a[i][0]=='A') c[i]=14; else cout<<"invalid"; } for(int k=b;k<5+b;k++) { for(int j=k+1+b;j<5+b;j++) { if (c[k]<c[j]) { int temp=c[k]; c[k]=c[j]; c[j]=temp; } } } if((c[0+b]==c[1+b]-1) &&(c[1+b]==c[2+b]-1) && (c[2+b]==c[3+b]-1) && (c[3+b]==c[4+b]-1) ) { p='E'; str=1; high1=c[0+b]; } if((a[0+b][0+b]==a[0+b][1+b]) && (a[0+b][0+b]==a[0+b][2+b]) && (a[0+b][0+b]==a[0+b][3+b]) && (a[0+b][0+b]==a[0+b][4+b])) { p='F'; fl=1; high1=c[0+b]; high2=c[1+b]; } for(int l=0+b;l<5+b;l++) { if(c[l]==c[l+1]) { two=two+1; temp[n]=c[l]; n++; } } for(int m=b;m<3+b;m++) { if (c[m]==c[m+2]) { two=two-2; three=three+1; high1=c[m]; if(two==1) { if(temp[0]==c[m]) high2=temp[1]; else high2=temp[0]; } else { high2=c[m+3]; } } } for(int q=b;q<2+b;q++) { if(c[q]==c[q+3]) { two=two-3; three=three-2; four=four+1; high1=c[q]; if(q==0) high2=c[4]; else high2=c[0]; } } if(two==1) p='B'; if (two==2) p='C'; if(three==1) { if (two==1) p='G'; else p='D'; } if(four==1) p='H'; if(str==1 && fl==1) p='I'; if(str==1 && fl==1 && c[4]>9) p='J'; if(str!=1 && fl!=1 && two!=1 && three!=1 && four!=1) { p='A'; high1=c[0]; high2=c[1]; } } }; int main() { int counter=0,anti=0; read(); play player1,player2; b=0; while(b<=10000) { player1.check(b); b=b+5; player2.check(b); b=b+5; if((int)player1.p>(int)player2.p) { counter++; } else if((int)player1.p==(int)player2.p) { if(player1.high1>player2.high1) counter++; if(player1.high1==player2.high1) { if(player1.high2>player2.high2) counter++; } } } anti++; cout<<b; cout<<a[100][1]; cout<<counter; return 0; }
Что я уже пробовал:
я использовал другую переменную для выполнения цикла вместо b и других циклов(для & do).
я думаю, что у меня есть проблема с отступом, но я не могу понять этого.
jeron1
char a[10000][2]; int b=0; using namespace std; void read() { int i; for(i=0;i<=10000;i++) { infile>>a[i][0]>>a[i][1]; } }
Самый большой индекс в массиве a-это a[9999][1], Вы для цикла в методе read() пытаетесь получить доступ к a[10000][1], это, вероятно, приведет к нарушению доступа.