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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2010, 19:26   #1
ssi
 
Регистрация: 24.01.2010
Сообщений: 6
По умолчанию проблема в процедуре.

Составить структуру библиографического описания книги, состоящую из следующих частей:
– АВТОРНАЗВАНИЕ (Автор, название)
– МЕСТОГОД (Место издания, издательство, год)
– ЧИСЛО СТРАНИЦ
В процедуре распечатать название книг и автора, изданных в одном из издательств («Высшая школа», «Мир», «Наука», «Радио и связь» и т.д.).

Проблема: не сравнивает izd и s и, как следствие не считает k.



//---------------------------------------------------------------------------

#include <clx.h>
#pragma hdrstop
//#include "stdafx.h"
#include <shellapi.h>
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
#include <cstdlib.h>
#include <conio.h>
//---------------------------------------------------------------------------

#pragma argsused

const int n = 1;//размерность массива
char izd[50];
struct opisanie //структура
{
char avrnazv[50]; //параметры стуктуры автор, название
char mestoizdan[50]; //место издания, издание, год
int k;
};
opisanie o[n];//задаем массив стуктур
int j=0;
void print(opisanie o[n], char s[30], int &k)
{
k = 0;
for(int i = 0; i < n; i++)
{ j=1;
while (o[i].mestoizdan[j] != '.' && o[i].mestoizdan[j])
{
izd[j]=o[i].mestoizdan[j];
j++;
}
if(izd == s)
{
printf("%s", o[i].avrnazv);
k++;
}
}
}

int main(int argc, char* argv[])
{
//int _tmain(int argc, _TCHAR* argv[])
//{
int i, k;
char s[50];
printf("‚ўҐ¤ЁвҐ ®ЇЁб**Ёп Є*ЁЈ ў §*¤***®¬ Ї®ап¤ЄҐ, зҐаҐ§ Їа®ЎҐ«:\n1.Ђўв®а.Ќ*§ў**ЁҐ\n2.€§¤*⥠«мбвў®.ЊҐбв® Ё§¤**Ёп.ѓ®¤\n3.—Ёб«® бва**Ёж\n");
for(i = 0; i < n; i++)
{
scanf("%s%s%d", &o[i].avrnazv, &o[i].mestoizdan, &o[i].k);//считываем данные
}
system("cls");
printf("%s", o[i].avrnazv);
printf("‚ўҐ¤ЁвҐ Ё§¤*⥫мбвў®\n");
scanf("%s", s);//вводим название издательства
print(o, s, k);
if (k == 0)
{
printf("’*Є®Ј® Ё§¤вҐ«мбвў* *Ґв\n");
}
else
// system("pause");
return 0;
getch();

//}
// return 0;
}
//---------------------------------------------------------------------------
ssi вне форума Ответить с цитированием
Старый 24.01.2010, 19:40   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

строки сравниваются функцией strcmp
counter вне форума Ответить с цитированием
Старый 24.01.2010, 21:38   #3
ssi
 
Регистрация: 24.01.2010
Сообщений: 6
По умолчанию

благодарю.
ssi вне форума Ответить с цитированием
Старый 24.01.2010, 23:45   #4
ssi
 
Регистрация: 24.01.2010
Сообщений: 6
По умолчанию

Одну проблему решили, появилась другая:
при сравнении строк, не видит равных строк, т.е. либо выводит всех авторов(если услое задано так: if(strcmp(izd, s)) ), либо ни одного(если так: if(strcmp(izd, s)==0) ).


//---------------------------------------------------------------------------

#include <clx.h>
#pragma hdrstop
//#include "stdafx.h"
#include <shellapi.h>
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
#include <cstdlib.h>
#include <conio.h>
//---------------------------------------------------------------------------

#pragma argsused

const int n = 2;//размерность массива
char izd[50];
struct opisanie //структура
{
char avrnazv[50]; //параметры стуктуры автор, название
char mestoizdan[50]; //место издания, издание, год
int k;
};
opisanie o[n];//задаем массив стуктур
int j=0;
void print(opisanie o[n], char s[30], int &k)
{
k = 0;
for(int i = 0; i < n; i++)
{ j=1;
while (o[i].mestoizdan[j] != '.' && o[i].mestoizdan[j])
{
izd[j]=o[i].mestoizdan[j];
j++;
}

if(strcmp(izd, s))
{
printf("%s\n", o[i].avrnazv);
k++;
}
}
}

int main(int argc, char* argv[])
{
//int _tmain(int argc, _TCHAR* argv[])
//{
int i, k;
char s[50];
printf("‚ўҐ¤ЁвҐ ®ЇЁб**Ёп Є*ЁЈ ў §*¤***®¬ Ї®ап¤ЄҐ, зҐаҐ§ Їа®ЎҐ«:\n1.Ђўв®а.Ќ*§ў**ЁҐ\n2.€§¤*⥠«мбвў®.ЊҐбв® Ё§¤**Ёп.ѓ®¤\n3.—Ёб«® бва**Ёж\n");
for(i = 0; i < n; i++)
{
scanf("%s%s%d", &o[i].avrnazv, &o[i].mestoizdan, &o[i].k);//считываем данные
}
system("cls");
printf("%s", o[i].avrnazv);
printf("‚ўҐ¤ЁвҐ Ё§¤*⥫мбвў®\n");
scanf("%s", s);//вводим название издательства
print(o, s, k);
if (k == 0)
{
printf("’*Є®Ј® Ё§¤вҐ«мбвў* *Ґв\n");
}
else
system("pause");
return 0;
getch();

//}
// return 0;
}
//---------------------------------------------------------------------------
ssi вне форума Ответить с цитированием
Старый 25.01.2010, 09:36   #5
ssi
 
Регистрация: 24.01.2010
Сообщений: 6
По умолчанию

всё, уже не актуально, решил сам.
начальное значение j=0; а не 1.
ssi вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обращение к объектам в процедуре. Maxs Помощь студентам 5 02.05.2009 12:54
Вопрос по процедуре VenMaster Общие вопросы Delphi 5 13.06.2008 17:37
Ошибка в процедуре GAGARIN-NEW Помощь студентам 2 21.12.2007 09:23