#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;
}
Строки
Странно получается сравниваю две строки одна выдается машиной, вторая вводиться с клавиатуры естественно начал проверять и оказалось что когда вводишь (c, b) почему-то Error не показываться, а когда v, n к примеру то Error показывается как так. Даю код
Код:
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();
}
#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();
}
спасибо конечно но вот еще вопрс почему выводиться
2 раза дом
2 раза она
и программа завершает рабоу как так
(желательно для обоих вариантов)
Цитата:
Originally posted by ФДУЧ
спасибо конечно но вот еще вопрс почему выводиться
2 раза дом
2 раза она
и программа завершает рабоу как так
(желательно для обоих вариантов)
спасибо конечно но вот еще вопрс почему выводиться
2 раза дом
2 раза она
и программа завершает рабоу как так
(желательно для обоих вариантов)
Я не понял вопроса. Что должно выводится, сколько раз и когда программа должна завершаться?
Код:
#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;
}
#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;
}