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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.02.2012, 05:39   #1
PotatoCaptain
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 40
По умолчанию Не сравнивает строки char(с++)

Здравствуйте, проблема такая, пишу курсовую по БД (БД простая,всезаписывается в блокнот), столкнулся с проблемой поиска по БД вот собственно код
ошибка почти в самом внизу
Код:
#include "stdafx.h"
#include "iostream"
#include "fstream"
#include "stdio.h"
#include "string"
#include "windows.h"
using namespace std;
struct BD {char fam[30];
int x,y,z,c,n;};

int _tmain(int argc, _TCHAR* argv[])
{   SetConsoleCP(1251); 
	SetConsoleOutputCP(1251);
	struct BD bd[100];
	char y=0, kor[30];
	int x=0,i=0,a=0,w=0;

	
	do{ system ("cls");
	cout << "      ******Меню*******"<< endl<< "1.Заполнить базу данных" <<endl<< "2.Показать баззу данных"<< endl<<
		"3.Корректировка базы данных"<<endl<<"4.Вывод ведомости продаж"<<endl<<"6.Конец"<<endl;
			 cin >> x;
	    
			 
			 if (x==1)
		{FILE *file = fopen( "file.txt", "w" );
		cout  <<"Введите колличесво покупателей"<< endl;
        cin >> a;
		for(i=0;i<a;i++)
		{cout  <<"Введите фамилию "<<i+1<<" покупателя"<< endl;
		cin>>bd[i].fam;
		fprintf(file, "%s\n", bd[i].fam);
		cout<<"Введите число"<<endl;
		cin>>bd[i].x;
		fprintf(file, "%d\n", bd[i].x);
	    cout<<"Введите месяц"<<endl;
		cin>>bd[i].y;
		fprintf(file, "%d\n", bd[i].y);
		cout<<"Введите год"<<endl;
		cin>>bd[i].z;
		fprintf(file, "%d\n", bd[i].z);
		cout<<"Введите цену"<<endl;
		if(i==a-1)
		{
		cin>>bd[i].c;
		fprintf(file, "%d", bd[i].c);
		}
		else
		{cin>>bd[i].c;
		fprintf(file, "%d\n", bd[i].c);}
		}
		fclose(file);
			cout << "База данных сохранена в файле: file.txt" << endl;
	    }
		
		
		if (x==2)
		{cout << "******Базза данных******"<< endl;
		FILE *file = fopen( "file.txt", "r" );
		i=0;
		cout<<" _____________________________________________________________________________"<<endl;
		cout<<"|______________________ФАМИЛИЯ|_______ДАТА|ИДЕНТИФИКАЦИОННЫЙ НОМЕР|_______ЦЕНА|"<<endl;
		while(!feof(file))
		{
	
		fscanf(file, "%s", bd[i].fam);
		cout<<"|";
		 cout.width(29);
         cout.fill('_');
		 cout << bd[i].fam<<"|";
		fscanf(file, "%d", &(bd[i].x));
		fscanf(file, "%d", &(bd[i].y));
		fscanf(file, "%d", &(bd[i].z));
		cout.fill('_');
		cout.width(3);
        cout<<bd[i].x<<".";
		cout.fill('0');
		cout.width(2);
		cout<<bd[i].y<<".";
		cout.fill(' ');
		cout.width(4);
		cout<<bd[i].z<<"|";
        bd[i].n=i+1;
		cout.width(23);
        cout.fill('_');
		cout<<bd[i].n<<"|";
		fscanf(file, "%d", &(bd[i].c));
	    cout.width(11);
        cout.fill('_');
		cout<<bd[i].c<<"|"<<endl; 
	    i++;}
        fclose(file);}


		else if (x==3){
			cout <<"Корректировка базы данных"<<endl;
			cout<<"Добавить нового покупателя или исправить информацию о старом?"<<endl;
		cout<<"Нажмите 1 для добавления и 2 для корректировки"<<endl;
		x=0;
		cin>>x;
		
		
		if(x==1)
		{FILE *file = fopen( "file.txt", "a" );
		cout <<"Введите колличество добовляемых покупателей"<< endl;
		cin >> a;
		 for (i=0;i<a;i++){cout  <<"Введите фамилию "<<i+1<<" покупателя"<< endl;
		cin>>bd[i].fam;
		fprintf(file, "%s\n", bd[i].fam);
		cout<<"Введите число"<<endl;
		cin>>bd[i].x;
		fprintf(file, "%d\n", bd[i].x);
	    cout<<"Введите месяц"<<endl;
		cin>>bd[i].y;
		fprintf(file, "%d\n", bd[i].y);
		cout<<"Введите год"<<endl;
		cin>>bd[i].z;
		fprintf(file, "%d\n", bd[i].z);
		cout<<"Введите цену"<<endl;
		if(i==a-1)
		{
		cin>>bd[i].c;
		fprintf(file, "%d", bd[i].c);
		}
		else
		{cin>>bd[i].c;
		fprintf(file, "%d\n", bd[i].c);}
		}
		 fclose(file);
		}
		//вот в этой части кода ошибка
		else if (x==2)
		{FILE *file = fopen( "file.txt", "r" );
		i=0; 
		while(!feof(file))
		{fscanf(file, "%s",&bd[i].fam);
		fscanf(file, "%d", &bd[i].x);
		fscanf(file, "%d", &bd[i].y);
		fscanf(file, "%d", &bd[i].z);
		fscanf(file, "%d", &bd[i].c);
		i++;
		}
		int q=i;
		cout<<"Введите фамилию того, кого желаете исправить"<<endl;
		cin>>kor;
		int k=0;
		for(i=0;i<q;i++) if  (bd[i].fam==kor) k++, w=i;//условие задал bd[i].fam==kor, вроде все верно, но почему то не распознает что равны
           if (k==0) cout<<"Нечего не найдено"<<endl;
		    else {cout<<"Найдено " << k<<" совпадение:";
			i=w;
			cout<<bd[i].fam<<" "<<bd[i].x<<"."<<bd[i].y<<"."<<bd[i].z<<" "<<bd[i].c<<endl;
		}
		
		fclose(file);}
		}
	cout <<"Если хотите продолжить нажм ите y"<< endl;
		cin >> y;}
	while (y=='y');


		system("pause");

	
	return 0;
}

Последний раз редактировалось PotatoCaptain; 02.02.2012 в 06:03.
PotatoCaptain вне форума Ответить с цитированием
Старый 02.02.2012, 05:42   #2
PotatoCaptain
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 40
По умолчанию

Тоесть допустим bd[1].fam=Фамилия1
и char kor=Фамилия1
должен писать найдено 1 совпадение
но пишет совпадений нет
PotatoCaptain вне форума Ответить с цитированием
Старый 02.02.2012, 06:02   #3
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Сколько же проблем у людей вызывают операции над строками в C, и всё от банального нежелания почитать книжку. Для сравнения строк используется функции strcmp, которая вернёт 0, если строки равны
Код:
if (strcmp(bd[i].fam, kor) == 0)
 ...
netrino вне форума Ответить с цитированием
Старый 02.02.2012, 06:20   #4
PotatoCaptain
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 40
По умолчанию

Огромное спасибо!правда помогло
PotatoCaptain вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод русской строки типа char* dollemika Visual C++ 2 26.11.2011 12:33
C++ выход за пределы строки (char) Alex11223 Помощь студентам 4 20.04.2011 20:27
C# - Вывод строки System.Char[] вместо нужного результата Lastsummer Помощь студентам 3 02.02.2011 22:55
Перегрузка оператора (принять номер строки и строку char) delias Общие вопросы C/C++ 0 06.01.2010 15:40
Длина строки в си : char string[255] Mixasik Помощь студентам 1 26.11.2008 20:33