Я создаю программу кодирования и когда я инструктирую программу создать сетку 5X5 на основе алфавита, пропуская буквы, соответствующие определенным заранее определенным переменным (которые даются значения по пользовательскому входу во время выполнения). У меня есть цикл, который инструктирует цикл продолжать работать до тех пор, пока значения, обращающиеся к массиву, не будут за пределами границ, этот цикл, похоже, вызывает проблему. Этот код стандартизован, поэтому не должно быть проблем с компиляцией его в другом компиляторе. Также было бы лучше разделить мою программу на функции? вот код:Программа Loop crashing, связанная с 2D-массивами
#include<iostream>
#include<fstream>
#include<cstdlib>
#include<string>
#include<limits>
using namespace std;
int main(){
while (!cin.fail()) {
char type[81];
char filename[20];
char key [5];
char f[2] = "q";
char g[2] = "q";
char h[2] = "q";
char i[2] = "q";
char j[2] = "q";
char k[2] = "q";
char l[2] = "q";
int a = 1;
int b = 1;
int c = 1;
int d = 1;
int e = 1;
string cipherarraytemplate[5][5]= {
{"a","b","c","d","e"},
{"f","g","h","i","j"},
{"k","l","m","n","o"},
{"p","r","s","t","u"},
{"v","w","x","y","z"}
};
string cipherarray[5][5]= {
{"a","b","c","d","e"},
{"f","g","h","i","j"},
{"k","l","m","n","o"},
{"p","r","s","t","u"},
{"v","w","x","y","z"}
};
cout<<"Enter the name of a file you want to create.\n";
cin>>filename;
ofstream outFile;
outFile.open(filename);
outFile<<fixed;
outFile.precision(2);
outFile.setf(ios_base::showpoint);
cin.ignore(std::numeric_limits<int>::max(),'\n');
cout<<"enter your codeword(codeword can have no repeating letters)\n";
cin>>key;
while (key[a] != '\0'){
while(b < 6){
cipherarray[b][c] = key[a];
if ( f == "q") {
cipherarray[b][c] = f;
}
if (f != "q" && g == "q" )
{
cipherarray[b][c] = g;
}
if (g != "q" && h == "q")
{
cipherarray[b][c] = h;
}
if (h != "q" && i == "q" )
{
cipherarray[b][c] = i;
}
if (i != "q" && j == "q")
{
cipherarray[b][c] = j;
}
if (j != "q" && k == "q")
{
cipherarray[b][c] = k;
}
if (k != "q" && l == "q")
{
cipherarray[b][c] = l;
}
a++;
b++;
}
c++;
b = 1;
}
в то время (с < 6 || б < 6) {
if (cipherarraytemplate[d][e] == f || cipherarraytemplate[d][e] == g || cipherarraytemplate[d][e] == h || cipherarraytemplate[d][e] == i ||
cipherarraytemplate[d][e] == j || cipherarraytemplate[d][e] == k || cipherarraytemplate[d][e] == l){
d++;
}
else {
cipherarray[b][c] = cipherarraytemplate[d][e];
d++;
b++;
}
if (d == 6){
d = 1;
e++;
}
if (b == 6){
c++;
b = 1;
}
}
cout<<"now enter some text."<<endl<<"To end this program press Crtl-Z\n";
while(!cin.fail()){
cin.getline(type,81);
outFile<<type<<endl;
}
outFile.close();
}
}
Я знаю, идет кто-то из тех, кто посмеет на этот пост, собирается наткнуться на этот пост, он программирует в течение 20 лет, и он будет смотреть на мой код и сказать: «что делает этот парень».
Прошу прощения, я еще не в середине двадцатого, но должен сказать то же самое. Некоторая структура в вашем коде поможет ее прочитать;) –
Вам не обязательно быть в середине сорока, чтобы задаться вопросом, что вы делаете ... :) Но все в порядке, все начинаются как новичок.Да, вы должны попытаться разбить свой код на функции, что упростит работу отдельных функций и сделает ваш код более удобочитаемым. Кроме того, индексы для массивов начинаются с 0, а не 1, что может быть частью проблемы, с которой вы столкнулись. – villintehaspam