Ошибки в создании справочника

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

ЮрийIII
Сообщения: 29
Зарегистрирован: 05 май 2008, 18:15

Здравствуйте!
Подскажите что не так??? находит 4 ошибки, вроде все библиотеки подключил, где-то в коде косяки...
вот код:

Код: Выделить всё

#include <stdio.h>
#include <conio.h>
#define fname[20]=fname "D:Phone.txt\0"
void main()
{
char fname [20]=fname;
FILE *in; // tel spravochnik
char obr[15];
char fam[15];
char tel[7];
int n=0;
puts("\n Poisk v tel spravochnike");
if((in=fopen(fname,"rt"))=NULL)
printf("\n Oshibka otkritiya faila %s!!!", fname)
getch();
return;
printf("Familiya =>>>");
scanf("%s", obr); //Obrazec dlya poiska
while (!feof(in))
fscanf(in, "%s %s %s", &fam, &tel);
if (fam==obr)
{
printf("%s %s %s", fam, tel);
}
if(n)
printf("Naydeno zapisey: %i", n); else
printf("Dannih ob abonente %s v BD net", obr);
fclose(in);
puts("\n dlya zawersheniya nagmite <ENTER>");
getch();
}
Apokal
Сообщения: 81
Зарегистрирован: 14 янв 2008, 19:02

Как бы сходу сразу могу сказать что ошибка в #define fname[20]=fname "D:Phone.txt\0", так походу нельзя писать вполне хватит #define fname "D:Phone.txt\0". Дальше тоже ошибка ибо у тя и в дефайне и в мейне было использовано одно имя fname при двух разных обьявлениях, просто замени в мейне имя масива на чтото другое ну например на filename. Ну и напоследок printf("\n Oshibka otkritiya faila %s!!!", fname) в конце нема точки с запятой)
For Those Who About The Rock We Salute You!!!
ЮрийIII
Сообщения: 29
Зарегистрирован: 05 май 2008, 18:15

Apokal, Спасибо!
Теперь всё работает. Только теперь программа не открывает текстовый документ с БД...
Albor
Сообщения: 491
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

if((in=fopen(fname,"rt"))=NULL) Должно быть if((in=fopen(fname,"rt"))==NULL)
Аватара пользователя
mc-black
Сообщения: 250
Зарегистрирован: 08 май 2008, 16:09
Откуда: Россия, Нижний Новгород
Контактная информация:

Я извиняюсь, но если "D:Phone.txt\0" - путь, что это неверный путь.. как-то так должно "D:\\Phone.txt\0".
На заказ: VBA, Excel mc-black@yandex.ru
ЮрийIII
Сообщения: 29
Зарегистрирован: 05 май 2008, 18:15

Исправил. Но всеравно не открыват файл *txt. Может всё дело в файле? Там в столбик идет => "Фамилия_1" "номер"
"Фамилия_2" "номер"
"Фамилия_3" "номер"
Или файла расширение другое взять?
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
на данный момент код таков:

Код: Выделить всё

#include <stdio.h>
#include <conio.h>
#define fname"D:\\phone.txt\0"
void main()
{
char filename [15]=fname;
FILE *in; // tel spravochnik
char obr[15];
char fam[15];
char tel[7];
int n=0;
puts("\n Poisk v tel spravochnike");
if((in=fopen("fname","rt"))==NULL);
printf("\n Oshibka otkritiya faila %s!!!", filename);
getch();
return;
printf("\n Familiya =>>>");
scanf("%s", obr); //Obrazec dlya poiska
while (!feof(in))
fscanf(in, "%s %s", &fam, &tel);
if (fam==obr)
{
printf("%s %s", fam, tel);
}
if(n)
printf("Naydeno zapisey: %i", n); else
printf("Dannih ob abonente %s v BD net", obr);
fclose(in);
puts("\n dlya zawersheniya nagmite <ENTER>");
getch();
}
Аватара пользователя
mc-black
Сообщения: 250
Зарегистрирован: 08 май 2008, 16:09
Откуда: Россия, Нижний Новгород
Контактная информация:

Код: Выделить всё

if((in=fopen("fname","rt"))==NULL);
должно быть без кавычек и без точки с запятой в конце, то есть

Код: Выделить всё

if((in=fopen(fname,"rt"))==NULL)
Смотрите внимательней свой код, не уверен, что на этом ошибки закончились )
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------

Код: Выделить всё

#include <stdio.h>
#include <conio.h>
#include <cstring>
#define fname "c:\\prog\\cpp\\projects\\sprav\\phone.txt\0"
void main()
{
	char filename[]=fname;
	FILE *in; // tel spravochnik
	char obr[15];
	char fam[15];
	char tel[7];
	int n=0;
	puts("\n Poisk v tel spravochnike");
	if((in=fopen(filename,"rt"))==NULL) {
		printf("\n Oshibka otkritiya faila %s!!!", filename);
		getch();
		return;
	}
	printf("\n Familiya =>>>");
	scanf("%s", obr); //Obrazec dlya poiska
	while (!feof(in)){
		fscanf(in, "%s %s", &fam, &tel);
		if (strcmp(fam,obr)==0)
		{
			printf("%s %s\n", fam, tel);
			n++;
		}
	}
	if(n)
		printf("Naydeno zapisey: %i", n);
	else {
		printf("Dannih ob abonente %s v BD net", obr);
		fclose(in);
		puts("\n dlya zawersheniya nagmite <ENTER>");
		getch();
	}
	return;
}
Ошибок в программе было пруд-пруди. Возьмите и радуйтесь! Не забывайте, что чтобы программа искала фамилии на русском языке, надо файл справочника сохранять в DOS-кодировке. Это же касается файла программы - сохраните cpp в кодировке DOS и напишите пояснительные сообщения в программе по-русски.
На заказ: VBA, Excel mc-black@yandex.ru
ЮрийIII
Сообщения: 29
Зарегистрирован: 05 май 2008, 18:15

mc-black, я бы с радостью писал по-русски. У меня С++ Боланд не пишет на русской раскладке, даже когда меняю язык на русский.
За код ОГРОМНОЕ спасибо. :)
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Теперь всё отлично работает!
ЮрийIII
Сообщения: 29
Зарегистрирован: 05 май 2008, 18:15

Ну мож все же кто знает как настроить дос, если такое возможно, чтоб там русские символы отображались???
Жутко неудобно с латиницей...
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Под DOS есть резидентная программа keyrus, воспользуйся ей.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить