Показать сообщение отдельно

проблемы с getline
  #1  
Старый 20.10.2009, 23:28
cupper
Постоянный
Регистрация: 06.06.2007
Сообщений: 575
С нами: 9963746

Репутация: 180


По умолчанию проблемы с getline

В програме немогу считать гетлайном строку, просто пропускается этот оператор и все.
Я сижу уже весь дерганый %(

вот код, весь
Код:
#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";
}
 
Ответить с цитированием