База данных на c++ без String
Вообщем, нужно написать базу данных на c++. Она должна с помощью одного из пунктов меню принимать ввод Ф.И.О, трех предметов и оценок по ним. Строки использовать, нельзя. Соответственно нужны динамические чаровые массивы.Я написал примерно, что-то вроде этого, но при вводе оно ждет ввод всех 255 символов. И даже если полностью забить массив то на выводе получаться крякозябры. А также строки между собой не разделяются насколько я понял. А также получается что при вводе должен учитываться пробелы например "Алексей Петрович Слухов".
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL,"rus");
int rows;
cout<<"Количество человек - ";
cin>>rows;
int bkv=255;
char **fio=new char*[rows];
for (int i=0;i<rows;i++)
{
fio[i]=new char[bkv];
}
for (int i=0;i<rows;i++)
{
for (int j=0; j<bkv;j++)
{
cin>>fio[i][j];
}
}
for (int i=0;i<rows;i++)
{
for (int j=0; j<bkv;j++)
{
cout<<fio[i][j];
}
cout<<endl;
}
for (int i=0;i<rows;i++)
{
delete [] fio[i];
}
delete [] fio;
system("pause>0");
}
Ответы (2 шт):
я понимаю, что некоторые преподаватели перегибают палку и рвут струны (string - струна), но все же возможно. Собственно ввод и вывод можно написать вот так
for (int i=0;i<rows;i++)
{
cin>>fio[i];
}
for (int i=0;i<rows;i++)
{
cout<<fio[i];
cout<<endl;
}
и все будет работать. И не нужно вложенных циклов.
если нужно читать строки с пробелами, то это где то так. Вместо
cin>>fio[i];
пишем такое
cin.getline(fio[i], bkv);
С этим есть одна маленькая проблема - после ввода числа количества, в входном потоке остается перевод строки и он читается сразу. Поэтому нужно его проигнорировать. И весь цикл чтения будет такой
cin.ignore(100, '\n'); // тут на самом деле и 2 хватило, но можно и что то лучше придумать
for (int i=0;i<rows;i++)
{
cin.getline(fio[i], bkv);
}
P.S. в коде есть много других ужасов, но оставим их на совести преподавателя.
вариант KoVadim у меня не работает (cin считывает всё до первого пробела), так что предложу свой вариант:
for (int i=0;i<rows;i++)
{
cin>>fio[i];
for (int k = 0; k < 2; k++)
{
int count = 0;
for (int j = 0; fio[i][j] != '\0'; j++)
count++;
fio[i][count] = ' ';
cin >> (fio[i] + count + 1);
}
}