Показать полную графическую версию : [решено] Помогите найти ошибку
Вот код
#include <iostream>
#include <string>
using namespace std;
int main()
{
string com;
int matrix[9][9]={0};
int x=9;
int y=9;
int v=9;
int ix, iy, iv;
do
{
cin>>com;
if(com=="in"){cin>>ix>>iy>>iv; matrix[ix][iy]=in(ix, iy, iv, x, y, v);};
if(com=="out"){cin>>ix>>iy; if(out(ix, iy, x, y)){cout<<matrix[ix][iy]<<endl<<"Sucesful"<<endl;};}
}while(true);
}
int in(int ix, int iy, int iv, int x, int y, int v)
{
if(!((ix<0)||(ix>x)||(iy<0)||(iy>y))){
if(((iv<0)||(iv>9))){cout<<"So big or so smal value!"<<endl;}
else{cout<<"Sucesful"<<endl; return iv;};}
else{cout<<"End of matrix!"<<endl;};
}
bool out(int ix, int iy, int x, int y)
{
if(!((ix<0)||(ix>x)||(iy<0)||(iy>y))){return true;}
else{cout<<"End of matrix!"<<endl;};
}
Ну код и что? Компилируется нормально, выводит ноль в консоль. Что искать то?
Вот что говорит дядюшка компилятор
1>c:\documents and settings\loner\мои документы\visual studio 2010\projects\m3\m3\m3.cpp(15): error C3861: in: идентификатор не найден
1>c:\documents and settings\loner\мои документы\visual studio 2010\projects\m3\m3\m3.cpp(16): error C3861: out: идентификатор не найден
Всё я уже сам нашол ошибку
Я не добавил прототипоа функций
Несколько замечаний по технике программирования. Есть такое понятие как "магическая цифра", у вас размер двухмерного массива равен 9, переменным y, x, v присвоено число девять. Потом труднее будет понять что является размером, а что значением. Всегда старайтесь использовать переменные.
...
const int row = 9;
const int column = 9;
int matrix[row][column] = {0};
...
Теперь такой момент, в условиях у вас слишком много скобок, это не ошибка, но они избыточные, достаточно написать
...
if(!(ix<0 || ix>x || iy<0 || iy>y)){
...
И наконец конструкция ввода\вывода...
do
{
cin>>com;
if(com=="in"){cin>>ix>>iy>>iv; matrix[ix][iy]=in(ix, iy, iv, x, y, v);};
if(com=="out"){cin>>ix>>iy; if(out(ix, iy, x, y)){cout<<matrix[ix][iy]<<endl<<"Sucesful"<<endl;};}
}while(true);
... »
Ввод массива
...
const int row = 9;
const int column = 9;
int matrix[row][column] = {0};
for(int i = 0; i < row; i++){
for(int j = 0; j < column; j++){
cout << "Matix[" << i << "][" << j << "] = "; // Для красоты ввода
cin >> matrix[i][j];
}
}
...
Вывод массива
...
const int row = 9;
const int column = 9;
int matrix[row][column] = {0};
for(int i = 0; i < row; i++){
for(int j = 0; j < column; j++){
cout << matrix[i][j] << endl;
}
}
...
На будущее, когда просите найти ошибку, сообщайте все, что вам о ней известно.
Вот что говорит дядюшка компилятор
1>c:\documents and settings\loner\мои документы\visual studio 2010\projects\m3\m3\m3.cpp(15): error C3861: in: идентификатор не найден
1>c:\documents and settings\loner\мои документы\visual studio 2010\projects\m3\m3\m3.cpp(16): error C3861: out: идентификатор не найден »
Действительно. У меня чего то MinGW Developer Studio чудит. Мало того что ошибку компиляции не выдало, дак еще и компилирует непонятно как. Попробовал скомпилировать g++, получил аналог этих ошибок и еще вот такое:
test.cpp: In function ‘bool out(int, int, int, int)’:
test.cpp:17: warning: control reaches end of non-void function
test.cpp: In function ‘int in(int, int, int, int, int, int)’:
test.cpp:11: warning: control reaches end of non-void function
Это означает, что в некоторых ветках условных операторов не указан оператор return. Такие вещи нужно исправлять.
if(com=="in"){cin>>ix>>iy>>iv; matrix[ix][iy]=in(ix, iy, iv, x, y, v);}; »
Лучше не жалеть строчек на нормальное форматирование.
do
...
while(true);
Тут у вас бесконечный цикл. Добавьте возможность его завершения.
Слов smal и sucesful в английском языке нет, есть small и successful. А фраза "So big or so small value!" переводится "Такое большое или такое маленькое значение", как минимум, нужно использовать too (слишком) вместо so (итак, такой).
Если собираетесь профессионально заниматья программированием, то подучите английский, он очень пригодится.
в условиях у вас слишком много скобок »
Весьма спорное замечание. Избыточные скобки в данном случае позволяют меньше задумываться о приоритете операций.
Весьма спорное замечание. Избыточные скобки в данном случае позволяют меньше задумываться о приоритете операций. »В данном случае они излишни. Как ни крути, здесь нет двойных условий и приоритета проверки какого либо из них когда нужно вычислить сначала какую-то одну часть, и\или вторую. Здесь 4 сравнения, с одной операций отрицания всей проверки.
Drongo, я и не утверждаю, что они здесь необходимы, просто при их наличии не нужно даже задумываться, что имеет больший приоритет сравнение или "или". Конечно, не трудно догадаться у чего приоритет выше, но ситуации бывают и запутанее. Ну и читать условие когда в нем сравнения выделены скобками легче (по крайней мере мне). Хотя в вашей записи тоже все читается вполне легко, так как сравнения отделены пробелами, но вот если отделить еще и переменные от заков сравнения (при более длинных именах переменных это имеет смысл), то читать станет сложнее. Вобщем, тут спор скорее о стиле оформления кода, а в этом вопросе каждый волен делать как ему удобнее, в разумных пределах конечно.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.