Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Строки

1.9K
18 апреля 2006 года
imported_ФДУЧ
104 / / 07.04.2005
Странно получается сравниваю две строки одна выдается машиной, вторая вводиться с клавиатуры естественно начал проверять и оказалось что когда вводишь (c, b) почему-то Error не показываться, а когда v, n к примеру то Error показывается как так. Даю код
Код:
#include <iostream.h>
#include <fstream.h>
#include <string.h>
#include <windows.h>
#include <conio.h>

struct MyChar{
            char rus[25];
            char eng[25];
            };

            char temp[60];
    int n = 0;
    char next[25];
int main(int argc, char* argv[])
{

    ifstream input_num("Data.dat");
    while(input_num.getline(temp,1500
    {n++;
    }
    input_num.close(); 
    ifstream input("Data.dat");
    typedef MyChar* array_my;
    array_my array;
    array = new MyChar[n];
     if(array == NULL)
     {
         cout<<"Error: Not free memmore";
     }
//----------------------------- ---------------------------------------------------------------------    
int z = 0;
int i = 0;
                         
for(int x = 0; x < n; x++)
   
    {
     input>>array.eng;
     input>>array.rus;
     z++;
     i++;

    }  
//------------------------------------------------------------

  int  v = 0;
  char word[25];
   
do{
 //------------------------------------------------------------------ГДЕТО ТУТ
    i = rand()%n;// -------------------- кстати может что лчуше есть

    CharToOem(array.rus, next);
    cout<<next<<endl;
    cin>>word;
   if(memicmp(array.eng, word, 25) == -1) // сравниваю строки
      { cout<<"Erorr"<<endl;
       getch();
       
   }
//------------------------------------------------------------------ГДЕТО ТУТ
 v++;
}while(v < n);

    cout<<"Hellow"<<endl;
//-------------------------------------------------------------

    input.close();
    delete [] array;
    return 0;
       
}

Содержание файла Data.dat


I я
you ты
hi он
it оно
She она
9.5K
18 апреля 2006 года
Damarus
101 / / 08.04.2006
Почему так странно используется memicmp:
 
Код:
if(memicmp(array.eng, word, 25) == -1)


memicmp возвращает:
< 0 если string1 меньше string2
0 если string1 идентична string2
> 0 если string1 больше string2

То есть правильнее будет так:
 
Код:
if (memicmp(array.eng, word, 25) != 0)

А лучше так:
 
Код:
if (strcmpi(array.eng, word) != 0)


А вообше это можно реализовать проще:
Код:
#include <windows.h>
#include <iostream>
#include <fstream>
#include <deque>
#include <string>

using namespace std;

struct MyChar
{
   string rus;
   string eng;
};

deque<MyChar> MyDeque;

void main(int argc, char *argv[])
{
   ifstream input("C:\\Data.txt", ifstream::in);
   if (!input.is_open()) return;

   while (!input.eof())
   {
      MyChar line; string::value_type *buffer;
      input >> line.eng >> line.rus;
      buffer = new string::value_type[line.rus.length() + 2];
      CharToOemA(line.rus.c_str(), buffer);
      line.rus = buffer;
      delete[] buffer;

      if (!line.eng.empty() && !line.rus.empty())
         MyDeque.push_back(line);
   }

   input.close();

   for (deque<MyChar>::size_type n = MyDeque.size() ; n > 0 ; n--)
   {
      deque<MyChar>::size_type index = rand() % MyDeque.size();

      string answ;
      cout << MyDeque[index].rus << endl;
      cin >> answ;

      if (MyDeque[index].eng.compare(answ) != 0)
         cout << "Error!" << endl;
   }

   cout << "Hellow" << endl;
   MyDeque.clear();
}
1.9K
19 апреля 2006 года
imported_ФДУЧ
104 / / 07.04.2005

спасибо конечно но вот еще вопрс почему выводиться
2 раза дом
2 раза она
и программа завершает рабоу как так
(желательно для обоих вариантов)
9.5K
19 апреля 2006 года
Damarus
101 / / 08.04.2006
Цитата:
Originally posted by ФДУЧ
спасибо конечно но вот еще вопрс почему выводиться
2 раза дом
2 раза она
и программа завершает рабоу как так
(желательно для обоих вариантов)



Я не понял вопроса. Что должно выводится, сколько раз и когда программа должна завершаться?

284
20 апреля 2006 года
michael_is_98
587 / / 25.02.2005
Конечно есть генераторы, которые обладают лучшими характеристиками. Часть их описана в Numerical Recipes. Вот один из них
Код:
#include <stdlib.h>
#include <math.h>
#include "random.h"


// генератор равномерных случ. чисел [0,1)
// см. Numerical Recipes, гл.7.1
//
// реализация генератора равномерного распределения
// I(j+1)=(a*I(j))mod m
// Константы Парка-Миллера

#define IA 16807 //=a
#define IM 2147483647//=m
#define AM (1.0f/IM)
// m=a*q+r
#define IQ 127773 //a
#define IR 2836   //r

#define NTAB 32
#define NDIV (1+(IM-1)/NTAB)
#define EPS 1.2e-7f
#define RNMX (1.0f-EPS)

static long dum;

// инициализация генератора
void seed(long dum_)
{
    dum=dum_;
}

float random(void)
{
    int j;
    long k;
    static long iy=0;
    static long iv[NTAB];
    float temp;
    if (dum <= 0 || !iy)
    {
        if (-dum < 1)
            dum=1;
        else
            dum = -dum;
        for (j=NTAB+7;j>=0;j--)
        {
            k=(dum)/IQ;
            dum=IA*(dum-k*IQ)-IR*k;
            if (dum < 0)
                dum += IM;
            if (j < NTAB)
                iv[j] = dum;
        }
        iy=iv[0];
    }
    k=(dum)/IQ;
    dum=IA*(dum-k*IQ)-IR*k;
   
    if (dum < 0)
        dum += IM;
    j=iy/NDIV;
    iy=iv[j];
    iv[j] = dum;

    if ((temp=AM*iy) > RNMX)
        return RNMX;
    else
        return temp;
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог