Форум программистов, компьютерный форум CyberForum.ru

Ф-ия month всегда возвращает true, хотя так не должно быть - C++

Восстановить пароль Регистрация
 
Оксана 1234
 Аватар для Оксана 1234
4 / 4 / 0
Регистрация: 10.04.2013
Сообщений: 158
24.10.2013, 02:17     Ф-ия month всегда возвращает true, хотя так не должно быть #1
Ф-ия month всегда возвращает true, хотя так не должно быть. В этой ф-ии я должна либо ввести полностью месяц, либо три первых буквы. Эсли все правильно возвращаться 1, эсли нет 0. Друзья, помогите скорей, пожалуйста!

main

C++
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
#include "flower.h"
#include <fstream>
#include <sstream>
#include <string>
#include <algorithm>
#include <iostream>
#include <iterator>
#include <cctype>
FILE*uf;
 
using namespace std;
 
void main()
{//konstryctoru
    flower kvit_1(void), kvit_2("rosa","red",2);flower kvit_3(kvit_2);
    //demonstrasia vvody i vuvody na ekran
    flower kvit_9;
 kvit_9.vvid();
 kvit_9.show();
 //demonstrasia vvody z faily i vuvody na ekran
 
flower kvit_10;
ifstream uf("out.txt");
 
kvit_10.read_file(uf);
kvit_10.show();
cout<<endl;
 
//demonstrasia vvody  i zapusy v fail
flower kvit_5;
kvit_5.vvid();
kvit_5.write_in_file();
 
//perevantashenia
char* r=new char[];
cout<<"Vvedit misiats "; cin>>r;
cout<<kvit_2.month(5)<<endl;
cout<<kvit_2.month(r)<<endl;
//cout<<kvit_2.month()<<endl;
//posulannia i adresu
flower*kvit_4;
kvit_4=&kvit_2;
cout<<kvit_4->get_color();
cout<<endl;
kvit_4=new flower(kvit_2);
cout<<kvit_4->get_color();cout<<endl;
delete kvit_4;
 
cout<<endl;
system("pause");
}
Описание ф-ий типа flower
C++
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <algorithm>
#include <iterator>
#include <iostream>
#include <cctype>
#include "flower.h"
FILE*f;
 
using namespace std;
 const int size = 12; 
  const char* a[size]={"january", "february", "mart", "april", "may", "june", "july", "ougest", "september", "october", "november", "december"};
 
int flower::count = 0;
 
 
 
bool flower::month(int n)
{   if((n<=0)&&(n>=12)) return false;
    string(name_month)=a[n-1];
    return true;
}
/*
int flower::GetCount()
{
    return count;
}*/
 
bool flower::month(char* s)
{
    for(int i=0; i<12;i++)
    {   if(!stricmp (s,a[i]))
    {numb_month=i+1;
    return true;}
    
    } 
    int j=0;
        for(int k=0; k<12;j=0,k++ )
    {for(int i=0; i<3;i++)
    {if ((a[k])[i]==s[i])
    {j++;
        if(j==3) return true;}}}
        
    return false;
}
 
char* flower::month()
{
    return name_month;
}
 
void flower::set_color(char*s)
{
    color=s;
}
 
char* flower::get_color()
{
    return color;
}
 
void flower::set_number(int s)
{
    number=s;
}
 
int flower::get_number()
{
    return number;
}
 
flower::flower()
{cout<<"Konstryktor\n";
name=0;
color=0;
number=0;
count ++;
}
 
void flower::read_file(ifstream &f)
{
    name=new char[12];
    color=new char[12];
     f >> this->name >>this-> number >>this-> color;   
    }
 
    void flower::write_in_file()
{
 ofstream f("Text.txt", ios::out | ios::app);
  f<<name<<' '; 
    f<<number<<' '<<color; 
    f.close();
}
 
void flower::vvid()
{
    char*s=new char[12];
    char*b=new char[12];
    int a;
    cout<<"Nazva kvitku "; cin>>s; cout<<"K-st pelustok "; cin>>a;
    cout<<"Color "; cin>>b;
    this->name=s;
    this->set_number(a);
    this->set_color(b);
};
 
void flower::show()
{
    cout<<"Nazva kvitku "<<name<<endl; cout<<"K-st pelustok "<<number<<endl;
    cout<<"Color "<<color<<endl;
};
 
 
 
flower::flower(flower &m)
{
    cout<<"Konstructor kopiyvannia\n";
    name=new char[strlen(m.name)+1];
    color=new char[strlen(m.color)+1];
    number=m.number;
    strcpy(name, m.name );
    strcpy(color,m.color);
    count ++;
}
 
flower::flower(char*ptr,char*l, int d)
{cout<<"Konstryktor z parrametramu\n";
int len=strlen(ptr);
int dow=strlen(l);
name=(char*) malloc(len+1);
color=(char*) malloc(dow+1);
number=d;
strcpy(name,ptr);
strcpy(color,l);    
count ++;
}
 
flower::~flower()
{cout<<"Robota destructora";
    count --;
}
Заголовочный файл flower
C++
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
#ifndef flower_h_
#define flower_h_
 
 
#include<iostream>
#include <string>
using namespace std;
 
 
class flower
{
private:
    int number;
    static int count;
    
protected:
    char *color;
public:
    char *name;
    char *name_month;
    int numb_month;
static int GetCount;
    flower();
    flower(char*,char*, int);
    flower(flower &);
    ~flower();
 
    
 
    void set_color(char*);
    char*get_color();
    void set_number(int);
    int get_number();
    bool month(int );
    bool month(char*);
    char* month ();
    void show ();
    void vvid();
    void read_file(ifstream&);
    void write_in_file();
    
    static int get_count()
{
    return count;
};
    
};
 
#endif
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2013, 02:17     Ф-ия month всегда возвращает true, хотя так не должно быть
Посмотрите здесь:

in_avail() всегда возвращает 0. C++
Разработать функцию, которая возвращает True, если полученные значения могут быть сторонами треугольника, False – в противном случае C++
C++ когда я вызываю функцию proverca, она всегда возвращает значение true и к тому же нифига не читает то, что я записал в password
C++ Уничтожается переменная по выходу из функции. так не должно быть
C++ Бинарный поиск всегда возвращает (-1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
24.10.2013, 02:18     Ф-ия month всегда возвращает true, хотя так не должно быть #2
if((n<=0)&&(n>=12))
n не может быть одновременно меньше нуля и больше 12. нужно || а не &&
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,427
24.10.2013, 02:19     Ф-ия month всегда возвращает true, хотя так не должно быть #3
Цитата Сообщение от Оксана 1234 Посмотреть сообщение
if((n<=0)&&(n>=12))
если n меньше нуля и больше 12, такого быть не может.

Код нечитабелен, больше отступов и пробелов, одна строка - одна инструкция
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.10.2013, 02:19     Ф-ия month всегда возвращает true, хотя так не должно быть #4
C++
1
2
3
4
5
bool flower::month(int n)
{   if((n<=0) || (n>12)) return false;
    string(name_month)=a[n-1];
    return true;
}
Оксана 1234
 Аватар для Оксана 1234
4 / 4 / 0
Регистрация: 10.04.2013
Сообщений: 158
24.10.2013, 02:21  [ТС]     Ф-ия month всегда возвращает true, хотя так не должно быть #5
Эту оплошность я исправлю, а вот другую ф-ию month где в параметрах есть char* не знаю как исправить. Ребята, помогте
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
24.10.2013, 02:29     Ф-ия month всегда возвращает true, хотя так не должно быть #6
написано так, что хз что вы там имели в виду.
в старой функции кстати вас ждет сюрприз. отгадайте, что делает:
string(name_month)=a[n-1];

не используйте char* для строк. используйте std::string. не надо выделять память, не надо сравнивать через ж...
все просто и понятно:
C++
1
2
3
4
5
6
std::string str1 = "123";
std::string str2 = "abc";
if (str1 != str2)
{
 ...
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2013, 02:47     Ф-ия month всегда возвращает true, хотя так не должно быть
Еще ссылки по теме:

С++, выводит a[533][j], хотя не должно C++
GetPrivateProfileInt всегда возвращает ноль C++
Syntax error хотя вроде быть не должно C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Оксана 1234
 Аватар для Оксана 1234
4 / 4 / 0
Регистрация: 10.04.2013
Сообщений: 158
24.10.2013, 02:47  [ТС]     Ф-ия month всегда возвращает true, хотя так не должно быть #7
Это означает, что мне вдруг захотелось ввести не sеptember, а sеp и программа должна принять это как истину, потому я должна сравнивать по-буквам месяцы, я не осень хорошо понимаю как это делать. Именно поэтому я использовала char, потому что не понимаю как по-другому можна сравнить часть слова с введенымы буквами

Добавлено через 11 минут
Меня интересует вот ета ф-ия
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bool flower::month(char* s)
{
    for(int i=0; i<12;i++)
    {   if(!stricmp (s,a[i]))
    {numb_month=i+1;
    return true;}
    
    } 
int j=0;
        for(int k=0; k<12;j=0,k++ )
    {for(int i=0; i<3;i++)
    {if ((a[k])[i]==s[i])
    {j++;
        if(j==3) return true;}}}
        
    return false;
}
Yandex
Объявления
24.10.2013, 02:47     Ф-ия month всегда возвращает true, хотя так не должно быть
Ответ Создать тему
Опции темы

Текущее время: 16:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru