Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2011, 18:02   #1
Miased
Новичок
Джуниор
 
Регистрация: 20.02.2011
Сообщений: 2
По умолчанию Телефонный справочник с использованием структрур

Программа, реализованная на С, после запуска должна предложить пользователю выбор:
1. Добавить запись
2. Удалить запись
3. Поиск по фамилии
4. Вывод справочника
5. Выход из программы
Собственно вот что получилось у меня. Выдает 47 ошибок. Подскажите, пожалуйста, что не так
Цитата:
#include "stdio.h"
#include "stdafx.h"
void main()
{
struct phone
{
char name[11];
char surname[21];
char number[13];
};
phone mas[20];
bool Add(void)
{
int i;
char temp[21];
for(i=0;i<20;i++)
if(mas[i].number[0]=='\0')
continue;
if(i>=20)
return false;
printf("Input name");
scanf("%10s\n",temp);
strcpy(mas[i].name,temp);
m1: printf("Input surname");
scanf("%20s\n",temp);
if(temp[0]=='\0')
{
printf("Retry");
goto m1;
}
strcpy(mas[i].surname,temp);
m2: printf("Input number");
scanf("%12s\n",temp);
if(temp[0]=='\0')
{
printf("Retry");
goto m2;
}
if(!isnumber(temp))
{
printf("Retry");
goto m2;
}
strcpy(mas[i].number,temp);
return true;
}
bool Delete(void)
{
char temp[13];
printf("Input number to delete");
scanf("%12s\n",temp);
for(int i=0;i<20;i++)
{
if(strcmp(temp,mas[i].number)==0)
{
mas[i].number='\0';
return true;
}
return false;
}
}
bool Search(void)
{
char temp[21];
printf("Input wanted surname");
scanf("%20s\n",temp);
for(int i=0;i<20;i++)
{
if(strcmp(temp,mas[i].surname)==0)
{
printf(mas[i].name""mas[i].surname" "mas[i].number);
return true;
}
return false;
}
}
bool Output(void)
{
for(int i=0;i<20;i++)
if(mas[i].number[0]!='\0')
{
printf(mas[i].name" "mas[i].surname" "mas[i].number);
return true;
}
return false;
}
bool Exit(void)
{
exit(1);
}
int answer;
m3: printf("1. Add\n""2.Delete\n""3. Search\n""4. Output\n""5. Exit\n""Input number:");
scanf("%d\n",answer);
if(answer<1||answer>5)
{
printf("Incorrect choice\n");
goto m3;
}
switch answer
{
case 1: if(Add()){printf("Added successfully");} else {printf("Failed");}
printf("Press Enter to continue");
char t[2];
scanf("%s\n",t);
break;
case 2: if(Delete()){printf("Deleted successfully");} else {printf("Failed");}
printf("Press Enter to continue");
char p[2];
scanf("%s\n",p);
break;
case 3: if(Search()){printf("Searched successfully");} else {printf("Failed");}
printf("Press Enter to continue");
char k[2];
scanf("%s\n",k);
break;
case 4: if(Output()){printf("Outputted successfully");} else {printf("Failed");}
printf("Press Enter to continue");
char m[2];
scanf("%s\n",m);
break;
case 5: Exit();
}
}
Miased вне форума Ответить с цитированием
Старый 21.02.2011, 10:33   #2
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

С Паскаля что ли переписывал?
В Си нет вложенных функций. Перенеси все свои Add,Delete,Search,Output,Exit за пределы main и массив структур тоже.

Кроме того понадобяться
Код:
#include <stdio.h>
#include <string.h>
раз уж ты используешь функции из этих библиотек.

Таким образом количество ошибок с VC 6.0 сокращается до 18. Ну а дальше сам попробуй. Не получиться пиши сюда, исправленный код не забудь.
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Старый 23.02.2011, 14:49   #3
Miased
Новичок
Джуниор
 
Регистрация: 20.02.2011
Сообщений: 2
По умолчанию

Спасибо! Уже исправила. Нет, не с Паскаля. Просто с Си совсем не дружу.
Тут новая проблема появилась. В Visual Studio 2010 весь код, функций с излишней табуляцией работал. А в 2008 для namespace std требует нечто вроде <vector> и функция Add работает некорректно (добавляет только одну запись).
Код:
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

using namespace std;
struct phone
		{
			char name[11];
			char surname[21];
			char number[13];
		};
phone mas[20];

bool Add(void)
{
	int i;
	char temp[21];
	for(i=0;i<20;i++)
		if(mas[i].number[0]=='\0')
			break;
	if(i>=20)
		return false;
	printf("Input name: ");
	scanf("%10s",&temp);
	strcpy(mas[i].name,temp);
m1:	printf("Input surname: ");
	scanf("%20s",&temp);
	if(temp[0]=='\0')
	{
		printf("Retry");
		goto m1;
	}
	strcpy(mas[i].surname,temp);
m2:	printf("Input number: ");
	scanf("%12s",&temp);
	if(temp[0]=='\0')
	{
		printf("Retry");
		goto m2;
	}
	for(int i=0;i<12;i++)
	{
		if(isdigit((int)temp[i])||temp[i+1]=='\0')
		{
			strcpy(mas[i].number,temp);
			return true;
		}
		else
		{
			printf("Retry");
			goto m2;
		}
	}
	
}
bool Delete(void)
{
	char temp[13];
	printf("Input number to delete: ");
	scanf("%12s",&temp);
	for(int i=0;i<20;i++)
	{
		if(strcmp(temp,mas[i].number)==0)
		{
			mas[i].number[0]='\0';
			return true;
		}
		return false;
	}
}
		bool Search(void)
		{
			char temp[21];
			printf("Input wanted surname: ");
			scanf("%20s",&temp);
			for(int i=0;i<20;i++)
			{
				if(strcmp(temp,mas[i].surname)==0)
				{
					printf(" %s\n %s\n %s\n",mas[i].name,mas[i].surname,mas[i].number);
					return true;
				}
				return false;
			}
		}
		bool Output(void)
		{
			for(int i=0;i<20;i++)
				if(mas[i].number[0]!='\0')
				{
					printf("%s %s %s\n",mas[i].name,mas[i].surname,mas[i].number);
					return true;
				}
				return false;
		}
		bool Exit(void)
		{
			exit(1);
		}

void main()
{
	int answer;
	for(int j=0;;j++)
	{
		m3:	printf("1. Add\n""2. Delete\n""3. Search\n""4. Output\n""5. Exit\n""Input number:");
			scanf("%d",&answer);
			if(answer<1||answer>5)	
			{
				printf("Incorrect choice\n");
				goto m3;
			}
			switch (answer)
			{
				case 1: if(Add()){printf("Added successfully\n");} else {printf("Failed\n");}
						printf("Press Enter to continue");
						getchar();
						getchar();
						break;
				case 2: if(Delete()){printf("Deleted successfully\n");} else {printf("Failed\n");}
						printf("Press Enter to continue");
						getchar();
						getchar();
				case 3: if(Search()){printf("Searched successfully\n");} else {printf("Failed\n");}
						printf("Press Enter to continue");
						getchar();
						getchar();
				case 4: if(Output()){printf("Outputted successfully\n");} else {printf("Failed\n");}
						printf("Press Enter to continue");
						getchar();
						getchar();
				case 5: Exit();
			}
	}	
}
Miased вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Телефонный справочник vladxxl Общие вопросы C/C++ 1 15.12.2010 20:28
С++ справочник телефонный BLacK_TeaR Помощь студентам 3 04.03.2010 13:42
Телефонный справочник Krechet Софт 5 10.08.2009 15:51
телефонный справочник salmanov Общие вопросы C/C++ 1 10.06.2009 20:55
Телефонный справочник на TC Qai Фриланс 5 25.05.2008 01:02