cupper
20.10.2009, 23:28
В програме немогу считать гетлайном строку, просто пропускается этот оператор и все.
Я сижу уже весь дерганый %(
вот код, весь
#include <iostream>
#include <string>
#include <stdlib.h> //isdigit(int)
#include <vector>
using namespace std;
int menu_input(const string &);
int check_digit_expert(const string &);
void output_matrix(ostream &, vector<vector<bool> > &, const size_t, const int);
int main(){
int expert = menu_input("Enter quantity of experts N = ");
int dimension = menu_input("Enter quantity of dimension matrix n = ");
vector< vector<bool> > matrix(dimension, vector<bool>(dimension*dimension, 0));
string strlineMatrix;
for (int vec=0; vec<expert; vec++){
// вводим матрицу
cout<<"Please enter values "<<vec+1<<" matrix:\n";
cout<<"Begin enter\n";
int skip, count; // с какого символа и сколько копировать
int j;
for (int i=0; i<dimension; i++){
skip=0;
j=0;
/*ТУТА !!!!!!!*/ getline(cin, strlineMatrix);
cout<<strlineMatrix<<"\n\n";
for (int n=0; n<strlineMatrix.length(); n++){
while (strlineMatrix[n]==' '){++n;}
skip=n;
++n;
count=1;
while (strlineMatrix[n] !=' '){
++count;
++n;
}
cout<<string(strlineMatrix, skip, count)<<"-";
if (j>=dimension || (matrix[vec][i*dimension+j]=(bool)check_digit_expert(string(strlineMatrix, skip, count)))<0){
cout<<"TEMP 1\n";
return 1;
}
++j;
}
if (j != dimension){
cout<<"Incorrect quantity of the entered values\n"<<"To continue input ?(Y/n): ";
char key;
cin>>key;
if (key=='n') return 1;
else --i;
}
}
cout<<"End enter\n\n";
}
output_matrix(cout, matrix, dimension, 0);
//matrix.erase(matrix.begin(), matrix.end());
//----------
char a;
cin>>a;
//----------
}
int menu_input(const string &str){
/*
будет требовать ввести число экспертов до тех пока не введут корректно
возвращает введене число в int
*/
cout<<str;
string expert;
int iexpert=0;
while (1){
cin>>expert;
iexpert=check_digit_expert(expert);
if (iexpert<1){
cout<<"ERROR ENTER VALUE: you enter: \""
<<expert<<"\", needed digit >= 0\n"
<<"Please "<<str;
}
else return iexpert;
}
}
int check_digit_expert(const string &str){
/*
Если str число >=0 то возвращает int этого числа, иначе -1
*/
for (int i=0; i<str.length(); i++){
if (isdigit(str[i])==0){
return -1;
}
}
return atoi(str.c_str());
}
void output_matrix (ostream & out, vector<vector<bool> > & matrix, const size_t len, const int nummatrix){
out<<"\n---------MATRIX----------\n";
for (size_t i=0; i<len; ++i){
for (size_t j=0; j<len; ++j){
out<<matrix[nummatrix][i*len+j]<<" ";
}
out<<endl;
}
out<<"\n---------MATRIX----------\n";
}
Я сижу уже весь дерганый %(
вот код, весь
#include <iostream>
#include <string>
#include <stdlib.h> //isdigit(int)
#include <vector>
using namespace std;
int menu_input(const string &);
int check_digit_expert(const string &);
void output_matrix(ostream &, vector<vector<bool> > &, const size_t, const int);
int main(){
int expert = menu_input("Enter quantity of experts N = ");
int dimension = menu_input("Enter quantity of dimension matrix n = ");
vector< vector<bool> > matrix(dimension, vector<bool>(dimension*dimension, 0));
string strlineMatrix;
for (int vec=0; vec<expert; vec++){
// вводим матрицу
cout<<"Please enter values "<<vec+1<<" matrix:\n";
cout<<"Begin enter\n";
int skip, count; // с какого символа и сколько копировать
int j;
for (int i=0; i<dimension; i++){
skip=0;
j=0;
/*ТУТА !!!!!!!*/ getline(cin, strlineMatrix);
cout<<strlineMatrix<<"\n\n";
for (int n=0; n<strlineMatrix.length(); n++){
while (strlineMatrix[n]==' '){++n;}
skip=n;
++n;
count=1;
while (strlineMatrix[n] !=' '){
++count;
++n;
}
cout<<string(strlineMatrix, skip, count)<<"-";
if (j>=dimension || (matrix[vec][i*dimension+j]=(bool)check_digit_expert(string(strlineMatrix, skip, count)))<0){
cout<<"TEMP 1\n";
return 1;
}
++j;
}
if (j != dimension){
cout<<"Incorrect quantity of the entered values\n"<<"To continue input ?(Y/n): ";
char key;
cin>>key;
if (key=='n') return 1;
else --i;
}
}
cout<<"End enter\n\n";
}
output_matrix(cout, matrix, dimension, 0);
//matrix.erase(matrix.begin(), matrix.end());
//----------
char a;
cin>>a;
//----------
}
int menu_input(const string &str){
/*
будет требовать ввести число экспертов до тех пока не введут корректно
возвращает введене число в int
*/
cout<<str;
string expert;
int iexpert=0;
while (1){
cin>>expert;
iexpert=check_digit_expert(expert);
if (iexpert<1){
cout<<"ERROR ENTER VALUE: you enter: \""
<<expert<<"\", needed digit >= 0\n"
<<"Please "<<str;
}
else return iexpert;
}
}
int check_digit_expert(const string &str){
/*
Если str число >=0 то возвращает int этого числа, иначе -1
*/
for (int i=0; i<str.length(); i++){
if (isdigit(str[i])==0){
return -1;
}
}
return atoi(str.c_str());
}
void output_matrix (ostream & out, vector<vector<bool> > & matrix, const size_t len, const int nummatrix){
out<<"\n---------MATRIX----------\n";
for (size_t i=0; i<len; ++i){
for (size_t j=0; j<len; ++j){
out<<matrix[nummatrix][i*len+j]<<" ";
}
out<<endl;
}
out<<"\n---------MATRIX----------\n";
}