Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка!!! ... HELP! Нород.. сюда.. вы не там ошибку ищите.. / 3 сообщений из 3, страница 1 из 1
12.08.2005, 06:14
    #33211878
Andrey_Ohotin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка!!! ... HELP! Нород.. сюда.. вы не там ошибку ищите..
Задача в том, чтобы при вводе имени, фамилии или отчества, прога выводила на экран список всех людей, с кем совпало это имя, фамилия или отчество.. вот этот код, что ниже, полностью рабочий, но он проверят только то слово, которое вначале строки! а мне нужно, чтобы проверка велась по всей строе.. будь слова в середине или даже в конце.. .. в предыдущем коде я пытался это сделать, но вылазила ошибка.. а в этом все рабботает, просто нужно что-то изменить, чтобы слово, введенное с клавы, проверялось не только в начале строки. есть просто всякие символы разделители.. пробелы.. и т.д. и т.п. билн.. ((( я не знаю, что делать.. а надо.. (( ЭТОТ кусок кода я выделил... посмотрите плизз...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
#include "stdafx.h"
#include "iostream.h"
#include "stdio.h"
#include "conio.h"
#include "string.h"
#include "ctype.h"
#include "new.h"
#include "windows.h"
#include "math.h"
#include "iomanip.h"
#include "fstream.h"
#include "iomanip.h"
#include "stdlib.h"

/*************************/
char bufRus[ 256 ];
char* Rus(const char *text)
{
	CharToOem(text,bufRus);
	return bufRus;
}
/*------------------------*/
const int l_fio =  30 ;
struct NOTE
{
public:
	char FIO[l_fio+ 1 ];  // Здесь храним Ф.И.О.
	int Phone;;        // Здесь храним номер телефона
	int B_Day;      // Здесь храним год рожления	        
};
/*------------------------*/
int Sorting(const void *num1, const void *num2);

int main()
{
	NOTE Note[ 5 ];	
	FILE *file;
	file = fopen("F:\\phone.txt","r");
	if(!file)
	{
		printf("%s\n",Rus("Ошибка открытия файла."));
		getch();
		return  1 ;
	}
	int i= 0 ;
	while(!feof(file))
	{		
		fgets(Note[i].FIO,l_fio,file);
		fscanf(file,"%i%i\n",&Note[i].Phone,&Note[i].B_Day);
		i++;
		if(i> 4 )
		{
			printf("%s\n",Rus("Слишком много записей"));
			return  2 ;
		}
	}
	fclose(file);
	int n_record = i;
	
	char name[l_fio+ 1 ];
	while(true)
	{
		printf("%s\n",Rus("Введите фамилию для поиска:"));
		printf("%s\n",Rus("Или нажмите <Enter> для выхода."));
        gets(name);			
		if(strlen(name) ==  0 )
			break;
		OemToChar(name,name);

        bool not_found = true;

		/*--------------------------------
		for(int k=0;k<n_record;k++)
		{		
			if(strstr(Note[k].FIO,name))
				if(Note[k].FIO[strlen(name)] == ' ')
				{				
					CharToOem(Note[k].FIO,Note[k].FIO);
					printf("%30s %6i %4i\n",Note[k].FIO,Note[k].Phone,Note[k].B_Day);
					not_found = false;	
				}				
		}
	if(not_found)
		printf("%s\n",Rus("Таких в списке нет!"));

		----------------------------------*/
	}
	printf("\n%s",Rus("Работа программы завершена!"));
	getch();
	return  0 ;
}
...
Рейтинг: 0 / 0
12.08.2005, 06:17
    #33211879
Andrey_Ohotin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка!!! ... HELP! Нород.. сюда.. вы не там ошибку ищите..
Andrey_OhotinЗадача в том, чтобы при вводе имени, фамилии или отчества, прога выводила на экран список всех людей, с кем совпало это имя, фамилия или отчество.. вот этот код, что ниже, полностью рабочий, но он проверят только то слово, которое вначале строки! а мне нужно, чтобы проверка велась по всей строе.. будь слова в середине или даже в конце.. .. в предыдущем коде я пытался это сделать, но вылазила ошибка.. а в этом все рабботает, просто нужно что-то изменить, чтобы слово, введенное с клавы, проверялось не только в начале строки. есть просто всякие символы разделители.. пробелы.. и т.д. и т.п. билн.. ((( я не знаю, что делать.. а надо.. (( ЭТОТ кусок кода я выделил... посмотрите плизз...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
#include "stdafx.h"
#include "iostream.h"
#include "stdio.h"
#include "conio.h"
#include "string.h"
#include "ctype.h"
#include "new.h"
#include "windows.h"
#include "math.h"
#include "iomanip.h"
#include "fstream.h"
#include "iomanip.h"
#include "stdlib.h"

/*************************/
char bufRus[ 256 ];
char* Rus(const char *text)
{
	CharToOem(text,bufRus);
	return bufRus;
}
/*------------------------*/
const int l_fio =  30 ;
struct NOTE
{
public:
	char FIO[l_fio+ 1 ];  // Здесь храним Ф.И.О.
	int Phone;;        // Здесь храним номер телефона
	int B_Day;      // Здесь храним год рожления	        
};
/*------------------------*/
int Sorting(const void *num1, const void *num2);

int main()
{
	NOTE Note[ 5 ];	
	FILE *file;
	file = fopen("F:\\phone.txt","r");
	if(!file)
	{
		printf("%s\n",Rus("Ошибка открытия файла."));
		getch();
		return  1 ;
	}
	int i= 0 ;
	while(!feof(file))
	{		
		fgets(Note[i].FIO,l_fio,file);
		fscanf(file,"%i%i\n",&Note[i].Phone,&Note[i].B_Day);
		i++;
		if(i> 4 )
		{
			printf("%s\n",Rus("Слишком много записей"));
			return  2 ;
		}
	}
	fclose(file);
	int n_record = i;
	
	char name[l_fio+ 1 ];
	while(true)
	{
		printf("%s\n",Rus("Введите фамилию для поиска:"));
		printf("%s\n",Rus("Или нажмите <Enter> для выхода."));
        gets(name);			
		if(strlen(name) ==  0 )
			break;
		OemToChar(name,name);

        bool not_found = true;

		/*--------------------------------
		for(int k=0;k<n_record;k++)
		{		
			if(strstr(Note[k].FIO,name))
				if(Note[k].FIO[strlen(name)] == ' ')
				{				
					CharToOem(Note[k].FIO,Note[k].FIO);
					printf("%30s %6i %4i\n",Note[k].FIO,Note[k].Phone,Note[k].B_Day);
					not_found = false;	
				}				
		}
	if(not_found)
		printf("%s\n",Rus("Таких в списке нет!"));

		----------------------------------*/
	}
	printf("\n%s",Rus("Работа программы завершена!"));
	getch();
	return  0 ;
}




а вот как было в пердыдущей проге.. этой же..

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
for(int i= 0 ;i<n_record;i++)
		{
			char *p = Note[i].FIO;			
			if(p = strstr(p,name))
			{
				char *c = p;				
				if(c != Note[i].FIO) //Слово не в начале строки?
					if(!ispunct(*(c- 1 ))&&!isspace(*(c- 1 ))) //Символ перед словом не разделитель?
						continue;
				if(ispunct(*p) || isspace(*p) || (*p == '\0'))
				{					
					CharToOem(Note[i].FIO,Note[i].FIO);
					printf("%30s %6i %4i\n",Note[i].FIO,Note[i].Phone,Note[i].B_Day);
					not_found = false;
				}
			}
		}
	if(not_found)
		printf("%s\n",Rus("Таких в списке нет!"));
	}
...
Рейтинг: 0 / 0
12.08.2005, 06:19
    #33211880
Andrey_Ohotin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка!!! ... HELP! Нород.. сюда.. вы не там ошибку ищите..
вот из-за этого изменения все и не работает...
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка!!! ... HELP! Нород.. сюда.. вы не там ошибку ищите.. / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]