Тема: Я майже не розумію cin.get
// sayings1.cpp -- using expanded String class
// compile with string1.cpp
#include <iostream>
#include <limits>
#include "string1.h"
const int ArSize = 10;
const int MaxLen =81;
int main()
{
/*
char a[256];
char b[256];
std::cout << "Enter string a: ";
std::cin.get(a,256); // / Прочитав рядок "Hello world"
std::cout << "\na: " << a << "\n"; // Вивів рядок "Hello world" (більш у буфері ні чого немає, можна читати далі)
std::cout << "\nEnter string b: ";
std::cin >> b; // Зчітав рядок "Hello world», поклав до зміннї char слово Hello та й видалив пробіл із буферу
std::cout << "\nb: " << b << "\n"; // п // вивів, що лежить в змінії
int j;
std::cin >> j; // Ти ти намагаєшся прочитати слово world, що залишилося, в змінну типу int. Помилка! Програма закривається.
std::cout << "j: " << j << "\n";
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');//відкинути максимальне число символів, яке може містити потік, до першого перекладу рядка включно.
//як переконатися що потік порожній */
using std::cout;
using std::cin;
using std::endl;
String name;
cout <<"Hi, what's your name?\n>> ";
cin >> name; // Так. Перше. Ввели наме. До речі розмір або ничого попередньо не вказували. ..Не бачу зупинки!
cout << name << ", please enter up to " << ArSize // Аа, такий-то, введи... Що? Десять?? Що??
<< " short sayings <empty line to quit>:\n";
String sayings[ArSize]; // array of objects....Не інакше як лічильник об'єктів ... масив об'єктів!!!!!
char temp[MaxLen]; // temporary string storage
int i;
for (i = 0; i < ArSize; i++)
{ //Функція int istream::get() визначена в класі istream бібліотеки <iostream> за визначенням витягає з вхідного потоку один символ і повертає його цілочисельний код.
cout << i+1 << ": "; //Навіщо виводити я + 1 з лічильника? А Хіба ж ... Зараз.. Ну так!
cin.get(temp, MaxLen); // Повинні прочести щось ..Функція get () же стандартного потоку введення cin примушує систему чекати введення користувачем будь-якого символу
while (cin && cin.get() != '\n') // Попередній рядок і так читає до '\n', хіба не так? Що, що це взагалі? ....Вже читали, що це ще таке? Читаємо або що?
continue; //Змушує передачу контролю до вираження найменшого застосування, що управляє, роблять, для, або при петлі.
if (!cin || temp[0] == '\0') // empty line?
break; // i not incremented Затвердження перерви закінчує виконання найближчої додаючої петлі або умовного оператора, в якому це з'являється.
else
sayings[i] = temp; // overloaded assignment
}
int total = i; // total # of lines read // Цей цикл цілком зрозумілий! Круто! ....Тимчасовий об'єкт засовуємо в sayings
cout << "Here are your sayings:\n";
for (i = 0; i < total; i++)
cout << sayings[i][0] << ": " << sayings[i] << endl; // Опа! Ми використовуємо його то з одним [i], то з двома [i][0]!! Ох ти..
//Ну не інакше як [0] по суті покажчик на початок рядка
int shortest = 0;
int first = 0;
for (i = 1; i < total; i++)
{
if (sayings[i].length() < sayings[shortest].length())
shortest = i;
if (sayings[i] < sayings[first])
first = i;
}
cout << "Shortest saying:\n" << sayings[shortest] << endl;;
cout << "First alphabetically:\n" << sayings[first] << endl;
cout << "This program used "<< String::HowMany()
<< " String objects. Bye.\n";
return 0;
}
//Я особисто ось так би прописував String sayings[ArSize][MaxLen]масив об'єктів бо інакше мені чудиться якась невідповіднисьть чи що..
//Я не можу толком зрозуміти ось цей код. Ніби то все і ясне, а ні, я дивлюся на нього і ниби то багато непоняток для мене.
//cin це об'єкт, він же потік, так?
//while (cin && Як ми так звертаємося до об'єкту, це що, можна?
//break перериває також цикл for, той, який зовнишьний? Бо інакше ж то смислу ніякого немає.
//Взагалі, ми ввели ось тут cin.get(temp, MaxLen); все що ввели, а що ж тоді це, while (cin && cin.get() != '\n') що? Ніби то ми узяли
//все з потоку і воно вже все в temp після цього! Ось як хочете, щось я не розумію.
//Я бажаю кожен код вивчіти до деталей, щоб мені принаймні казалося, що я все поняв та все розумію, а тоді вже йти далі.
Я не можу толком зрозуміти ось цей код. Ніби то все і ясне, а ні, я дивлюся на нього і ниби то багато непоняток для мене.
cin це об'єкт, він же потік, так?
while (cin && Як ми так звертаємося до об'єкту, це що, можна?
break перериває також цикл for, той, який зовнишьний? Бо інакше ж то смислу ніякого немає.
Взагалі, ми ввели ось тут cin.get(temp, MaxLen); у temp все що ввели з клавіатури, а що ж тоді це, while (cin && cin.get() != '\n') що? Ніби то ми узяли
все з потоку і воно вже все в temp після цього! Ось як хочете, щось я не розумію.
Я бажаю кожен код вивчіти до деталей, щоб мені принаймні казалося, що я все поняв та все розумію, а тоді вже йти далі.