powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка!!! ... HELP! Нород.. сюда.. вы не там ошибку ищите..
3 сообщений из 3, страница 1 из 1
Ошибка!!! ... HELP! Нород.. сюда.. вы не там ошибку ищите..
    #33211878
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 ;
}
...
Рейтинг: 0 / 0
Ошибка!!! ... HELP! Нород.. сюда.. вы не там ошибку ищите..
    #33211879
Andrey_Ohotin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Ошибка!!! ... HELP! Нород.. сюда.. вы не там ошибку ищите..
    #33211880
Andrey_Ohotin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот из-за этого изменения все и не работает...
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка!!! ... HELP! Нород.. сюда.. вы не там ошибку ищите..
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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