Всем привет!
В с++ не силен, только постигаю азы.
Имеется задание (во вложении).
Смахивает на самописный SVN.
При выполнении, выбирая 2й пункт (добавить данные), первый проход работает, данные добавляются и просматриваются.
Если же второй раз попытаться добавить, то программа как бы проскакивает через строчку
Код:
printf("Введите ключ:");
scanf_s("%d",&temp_item.key);
и выполняется сама далее, зацикливаясь. Проблема, по-моему в указателях и temp_item, но как правильно будет, не понимаю.
Код. ms vs 2010 c++
PHP код:
// variant16.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <conio.h>
//#include "Item.h"
using namespace std;
typedef struct Item{ // тип - элемент таблицы;
int index;
int key;
int release;
char *info;
Item *next;
} Item;
int const rows_count = 10;
vector<Item> items;
int index = 0;
int check_release(int key)
{
/*
функция служит для присвоения каждый раз новой версии релиза
в отдельно взятой ветке
*/
int max = key;
if (items.size() > 0)
{
for (vector<Item>::iterator i = items.begin(); i != items.end(); ++i)
if (i->key = key)
if (max < i->release)
max = i->release;
} else max +=1;
return max;
}
int add(void)
{
Item temp_item;
temp_item.index = items.size()+1;
temp_item.key = 0;
temp_item.release = 0;
temp_item.info;// = "sss";
printf("Введите ключ:");
scanf_s("%d",&temp_item.key);
printf("Версия ставится автоматически по ключу: %d", temp_item.key,"\n");
int temp_key = temp_item.key;
temp_item.release = check_release(temp_key);
printf("\nПоставленная версия: %d", temp_item.release, "\n");
//if (temp_item.info == "0")
//{
printf("\nВведите информацию: ");
scanf_s("%d",temp_item.info);
//}
items.push_back(temp_item);
return 0;
}
int search_versions(int key)
{
return 0;
}
int optimize_table(void)
{
return 0;
}
int display(void)
{
printf("+---+-------------+-------------|-------------------------------------------+\n");
printf("| № | key | release | info |\n");
printf("|---|-------------|-------------|-------------------------------------------+\n");
for (vector<Item>::iterator i = items.begin(); i != items.end(); ++i)
{
printf("| %d",i->index);
printf("| %d",i->key);
printf("| %d",i->release);
printf("| %s", &i->info);
printf("|\n");
//cout << "|",i->index,"|",i->key, "|",i->release, "|", i->info, "|\n";
}
return 0;
}
void del(int index)
{
for (int i = index; i < rows_count; ++i)
items[i] = items[i + 1];
}
int menu(void)
{
char menu_key;
bool enabled = true;
while (enabled){
//for (int i=1; i<10; i++){
printf("\nГлавное меню:\n");
printf("Для просмотра таблицы нажмите - 1\n");
printf("Для добавления записи в таблицу нажмите - 2\n");
printf("Чтобы оптимизировать таблицу, удалив старые версии записей - нажмите - 3\n");
printf("Чтобы выполнить поиск по ключу, нажмите - 4\n");
printf("Чтобы выполнить удаление по ключу, нажмите - 5\n");
printf("Для выхода нажмите - ESC\n");
switch (menu_key = _getch())
{
case '1':
printf("Просмотр таблицы...\n");
display();
break;
case '2':
printf("Добавить данные...\n");
add();
break;
case '3':
printf("Оптимизировать таблицу...\n");
//optimize
break;
case '4':
printf("Удалить данные по ключу...\n");
//del
//index - нужный индекс
scanf_s("%d",&index);
del(index);
break;
case '5':
//search
break;
case 27:
enabled = false;
cout<<"Закрытие программы...\n";
break;
default:
printf("\nВыберите пункт меню от 1 до 5\n");
break;
}
}
return 0;
}
int _tmain(void)
{
printf("Hello, World!\n");
setlocale( LC_ALL,"Russian" );
menu();
//scanf_s("%d",&menu_key);
//menu(menu_key);
system("pause");
return 0;
}