Перевести программу из C++ в Си - C (СИ) (77253)
Формулировка задачи:
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <string.h>
using namespace std;
class NameDataSet
{
public:
char szName[128];
// указатель на следующую запись в списке
NameDataSet* pNext;
};
// указатель на первую запись списка
NameDataSet* pHead = 0;
// добавление нового члена в список
void add(NameDataSet* pNDS)
{
pNDS->pNext = pHead;
// заголовок указывает на новую запись
pHead = pNDS;
}
// чтение имени
NameDataSet* getData()
{
// читаем имя
char nameBuffer[128];
cout << "\nEnter name:";
cin >> nameBuffer;
// усли "exit" - выход
if ((stricmp(nameBuffer, "exit") == 0))
{
return 0;
}
// новая запись для заполнения
NameDataSet* pNDS = new NameDataSet;
// заполнение поля имени и обнуление указателя
strncpy(pNDS->szName, nameBuffer, 128);
pNDS->szName[127] = '\0';
pNDS->pNext = 0;
// возврат адреса созданного объкта
return pNDS;
}
int main(int nNumberofArgs, char* pszArgs[])
{
cout << "Read names of students\n"
<< "Enter 'exit' for first name to exit\n";
// создание объекта NameDataSet
NameDataSet* pNDS;
while (pNDS = getData())
{
// добавление в конец списка
add(pNDS);
}
cout << "Entries:\n";
pNDS = pHead;
while(pNDS)
{
// вывод текущей записи
cout << pNDS->szName << "\n";
// получение следующей записи
pNDS = pNDS->pNext;
}
system("PAUSE");
return 0;
}Решение задачи: «Перевести программу из C++ в Си»
textual
Листинг программы
struct NameDataSet
{
char szName[128];
NameDataSet* pNext;
} parampampam; // готовая переменная
struct NameDataSet *foo, bar; // объявление переменных
struct NameDataSet ( struct NameDataSet ); // прототип функции, возвращающей структуру
// NameDataSet и принимающей в качестве аргумента
// такую же структуру
Объяснение кода листинга программы
- Структура
NameDataSetобъявлена с двумя полями:szNameтипаcharс длиной в 128 символов иpNextтипаNameDataSet*. - Переменная
parampampamтипаNameDataSetинициализирована. - Объявлены две переменные
fooиbarтипаNameDataSet*. - Прототип функции
NameDataSet NameDataSet(struct NameDataSet)объявлен. Эта функция возвращает структуруNameDataSetи принимает в качестве аргумента такую же структуру. Список не содержит более 20 элементов, как указано в условии.