В програме немогу считать гетлайном строку, просто пропускается этот оператор и все. Я сижу уже весь дерганый %( вот код, весь Code: #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"; }
cin>> читает до первого пробела. --------------- вся проблема в том что getline неработает корректно если перед ним уже читалась чтрока через cin>> Вот пример, можете проверить Code: #include <iostream> using namespace std; int main(){ string str; cin>>str; cout<<str<<endl; getline(cin, str); cout<<str<<endl; } Превое что приходит в голову проста заменить все cin>> на getline. а как если без этого ?
Перед вызовом Code: getline() сделай: Code: [b]cin.sync()[/b] _http://www.cplusplus.com/reference/iostream/istream/sync/
cin.getline как раз таки юзают при использовании хедера string.h(Си) то бишь массив чаров , а у него тут переменная как стринг объявлена , Roston, думаю ты прав насчет того что нужно использовать эту функцию, но тогда и использовать надо char.
ТС... выдели кусок кода где именно не читается... и вопше просто попробуй читать строку в отдельной програме,а когда найдеш выход то сунь ее в свою. Если ты например делаеш так Code: char text[100]; cout<<"Введите текст"; cin.getline(text,100); cout<<text; должно работать
Вообще-то после cin >> str; считывание остается на той же строке, поэтому для получения следующей строки необходимо считать из потока символ '\n' (перейти к следующей строке) оператором getline(cin,str); а уже потом считывать нужную строку тем же оператором То есть просто добавь после cin >> оператор getline() или (что не рекомендую из-за более плохой читабельности кода) перед нужным getline добавь дополнительный getline(cin,str)
Считывайте всё в строку, а потом её разбирайте(можно её даже запихать в sstream). Проблем и багов будет в 100 раз меньше