Заменить cout и cin на printf и scanf - C (СИ) (149322)
Формулировка задачи:
#include <iostream>
using namespace std;
struct elem
{
int info; // данные
elem *next; // указатель на следующий элемент
};
elem *first=NULL; // указатель на начало списка
// добавляет элемент в список с учетом сортировки
void add_sort(int data)
{
if (first==NULL) // проверяем существует ли список
{ // если нет
first=new (elem); // выделяем память для элемента списка
first->info=data; // записываем в поле info данные
first->next=first; // указатель на следующий элемент = first
} // first теперь указывает на первый элемент
else // списка
{ // если список уже существует
if (data < first->info) // если элемент нужно вставить в начало
{
elem *adr,*adr1; // объявляем вспомогательныe указатели
adr1=first; // записываем в adr адрес первого элемента
while (adr1->next!=first) // до тех пор пока поле next по адресу adr
adr1=adr1->next; // переходим к следующему полю списка
adr=new(elem); // выделяем память для элемента списка
adr->next=first; // next нового элемента направляем на старый first
first=adr; // переходим к новому элементу списку (новый first)
first->info=data; // записываем в поле info данные
adr1->next=first;
}
else
{
elem *adr,*adr1; // объявляем вспомогательные указатели
adr=first; // записываем в adr адрес первого элемента
while(adr->next!=first) // до тех пор пока поле next по адресу adr
{ // не содержит first
if (data < adr->next->info) // если data меньше adr->next->info
break; // выходим из цикла
adr=adr->next; // переходим к следующему полю списка
}
// adr теперь указывает на элемент, после которого нужно вставить новый
adr1=adr->next; // запоминаем адрес элемента, следующего за вставляемым
adr->next=new(elem); // выделяем память для нового элемента списка
adr=adr->next; // переходим к новому элементу списку
adr->info=data; // записываем в поле info данные
adr->next=adr1; // указатель на следующий элемент = адрес следующего за вставляемым
}
}
}
// выводит список на экран
void print()
{
if (first==NULL) // проверяем существует ли список
{ // если нет
cout << "Список пустой";
}
else
{ // если список уже существует
elem *adr; // объявляем вспомогательный указатель
adr=first; // записываем в adr адрес первого элемента
while(adr->next != first) // до тех пор пока поле next по адресу adr
{ // не равно first
cout << adr->info << " "; // выводим на экран данные из поля info
adr=adr->next; // переходим к следующему полю списка
}
cout << adr->info << " "; // выводим на экран данные из поля info последнего элемента
}
cout << endl;
}
// удаляет элемент из списка
void del(int data)
{
if (first==NULL) return; // если список не существует, выходим из функции
elem *adr,*adr1; // объявляем вспомогательные указатели
adr=first; // записываем в adr адрес первого элемента
if (adr->info==data) // если искомое поле находится в начале
{ // списка, то
adr1=first; // начиная с начала списка
while (adr1->next!=first) // в цикле
adr1=adr1->next; // смещаемся к последнему элементу
if (first==adr->next) // если это единственный элемент в списке
{
first = NULL; // обнуляем указатель на начало списка
}
else // иначе
{
first=adr->next; // записываем в first адрес следующего эл-а
adr1->next=first; // next последнего перенаправляем на новый first
}
delete adr; // удаляем первый элемент из памяти
}
else // если искомое поле находится не в начале
{ // списка
if (adr->next == first) return; // если искать больше негде, то выходим из функции
while(adr->next->info!=data) // перебираем элементы списка до тех пор
{ // пока adr->next->info не будет равно data
adr=adr->next; // переходим к следующему полю списка
if (adr->next == first) return; // если ничего не нашли, то выходим из функции
}
adr1=adr->next; // запоминаем адрес удаляемого элемента
adr->next=adr->next->next; // перезаписываем указатели
delete adr1; // удаляем требуемый элемент
}
}
int main()
{
setlocale(LC_CTYPE, "russian_Russia.1251"); // для корректного вывода кириллицы на экран
int v, a;
while (1)
{
cout << "Сделайте выбор:" << endl;
cout << "1 - добавление элементов" << endl;
cout << "2 - просмотр содержимого" << endl;
cout << "3 - удаление элементов" << endl;
cout << "0 - выход" << endl;
cin >> v;
switch (v)
{
case 1:
cout << "Введите число: ";
cin >> a;
add_sort(a); // добавление элементов
break;
case 2:
print(); // просмотр содержимого
system("pause");
break;
case 3:
cout << "Введите число для удаления из списка: ";
cin >> a;
del(a); // удаление элементов
}
if (v == 0) break;
}
// system("pause");
return 0;
}Решение задачи: «Заменить cout и cin на printf и scanf»
textual
Листинг программы
scanf("%d", &a);
Объяснение кода листинга программы
В данном коде происходит следующее:
- Используется функция scanf для ввода значения переменной
aс помощью устройства ввода. - Тип данных переменной
aдолжен быть int (целое число). - Функция scanf пытается считать значение из устройства ввода и сохранить его в переменной
a. - Если ввод корректен, то значение переменной
aбудет равно введенному числу. - Если ввод некорректен или введенное значение не является числом, то переменная
aбудет не определена или будет содержать некорректное значение.