Similar presentations:
Потоки и файлы
1. Потоки и файлы
Часть 1Потоки
2. Потоковые классы
iosistream
fstreambase
ostream
iostream
ifstream
fstream
ofstream
3. Флаги форматирования
skipws
left, right
dec, oct, hex
showpoint
scientific, fixed
…
4. Установка флагов форматирования
• setf(ios::flag_name)• unsetf(ios::flag_name)
cout.width(10);//метод класса ios
cout.unsetf(ios::dec);
cout.setf(ios::hex|ios::right);
cout<<12; //
c
/*
Вместо комбинации setf\unsetf можно
использовать
cout.setf(ios::hex|ios::right,ios::basefield)
;
*/
5. Манипуляторы потоков
• dec, oct, hex• endl
• …
cout<<hex<<12; //c
6. Манипуляторы с аргументами
setw
setfill
setprecision
setiosflags, resetiosflags
#include<iomanip>
cin >> a;
cout << "\nyour input\n" <<
resetiosflags(ios::dec) <<
setiosflags(ios::hex)
<<
setw(10)<<
setfill('n')<<a;
7. Методы класса ios
c = fill (), fill (c)
p = precision(), precision(p)
w = width(), width(w)
setf(f), unsetf(f)
cout.width(10);
cout.fill('_');
cout.unsetf(ios::dec);
cout.setf(ios::hex|ios::right);
cout<<12;
//_________c
8. istream
>>
get(c), get(str,max), get(str,max,delim)
getline(str,max,delim), getline (str,max)
ignore(max,delim)
putback(c)
peek(c)
gcount()
read(str,max)
seekg(), seekg(pos,seek_dir)
tellg()
9. ostream
<<
put(c)
flush()
write(str,size)
seekp(pos)
seekp(pos,seek_dir)
tellp()
10. Функции флагов ошибки
eof()
fail()
good()
clear(int=0)
11. Пример
char c, str[10];cin >> c;
cout<<"c by cin "<<c<<endl;
cin.get(c);
cout<<"c by get "<<c<<endl;
cin.get(str,9);
cout<<"str by get "<<str<<endl;
cin.get(c);
cout<<"c by get again "<<c<<endl;
cin.ignore(9,'\n');
cin.get(str,9,'_');
cin.ignore(9,'\n');
cout<<endl<<"str until '_' or <9\n"<<str<<endl;
cin.get(str,5);
cin.ignore(9,'\n');
cout<<"strlen<5"<<endl<<str;
system("pause");
12. Пример
char str[100];cin.getline(str,99);
cout<<cin.gcount()<<" keys: " <<str<<endl;
cin.getline(str,99,'.');
cout.flush();
cout<<static_cast<char>(cin.peek());
cin.putback(' ');//тип int
cout<<str<<endl;
cout<<cin.get();//32
cout.put('+');
system("pause");
13. Проверка ввода
int i;while (true){
cout<<"\ninput integer value\n";
cin.unsetf(ios::skipws);//разделители
cin >>i;
if (cin.good()){
cin.ignore(10,'\n');
break;
}
if (cin.fail())cout<<"fail";
cin.clear();
cin.ignore(10,'\n');
}
cout<<endl<<i;
14. Пример
int i; char str[100];while (true){
cout<<"\ninput integer value\n";
cin.unsetf(ios::skipws);
cin >>str;
for (int j=0; j<strlen(str); j++)
if (str[j]<='0'||str[j]>='9'){
cin.clear(ios::failbit);//устанавливаем
break;//флаг ошибки вручную
}
if (cin.good()){
cin.ignore(100,'\n'); break;}
if (cin.fail())cout << "fail";
cin.clear();
cin.ignore(100,'\n');
}
i = atoi(str);
cout << endl << i;