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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Darky
Быдлокодер
507 / 294 / 45
Регистрация: 22.11.2009
Сообщений: 892
Завершенные тесты: 1
#1

Символьные массивы и их друзья - C++

22.11.2009, 08:54. Просмотров 1108. Ответов 11
Метки нет (Все метки)

Доброе время суток.
Сразу хочу оговориться, что задача, условие которой я напишу далее, не связана с заданием в институте - я делаю это исключительно для себя и только для саморазвития.
Я поставил перед собой следующую задачу - написать своеобразный проверщик на вопросы.
Сначала программа предлагает ввести пользователю количество вопросов, в связи с чем реализован простой цикл, внутри которого предлагается ввести вопрос и ответ на него, в конце всех циклов - много строчек вниз, чтобы пользователь не увидел своих же ответов.
Далее программа должна случайным образом выбирать вопрос и предлагать пользователю ввести на него ответ.
Возникает проблема. Точнее много проблем.
Код на Borland 5.2

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
#include <iostream>                            //libr
#include <stdlib.h>
#include <time.h>
void main()
{                                              //const
int i=0,j,k,len=0,sum;
char v1[255],v2[255],o;
srand((unsigned)time(0));                      //rand
cout<<"Введите кол-во вопросов: ";
cin>>i;                                        //i
for(j=1;j<=i;j++)                          //цикл1
 {
   cout<<"Введите вопрос "<<j<<": \n";
   cin>>v1[len];
   frs:                          //Функция рандомизации и определения длины
   k=rand()%i;                   //
   if (k==0) goto frs;           //здесь проблемы с 0 значением,
   while(v1[len])                //исправил, но криво
   len++;                        //
   sum=k+len;                               //=(
   cout<<"Ответ на вопрос? "<<j<<"\n";
   cin>>v2[sum];
 }
 cout<<"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";  //=(
for(j=1;j<=i;j++)                           //цикл2
 {
   cout<<"Вопрос "<<k<<": ";
   cout<<v1[k]<< endl;
   cout<<"Ответ: "<<endl;
   cin>>o;
   if (o==v2[k]) cout<<"Верно!"<<endl;          //bingo
   else
   {
     cout<<"Правильный: "<<v2[k]<< endl;
   }
   cout<<"\n\n\n\n\n";
 }
}

Знаю, что есть ошибки в области записи в массив, но как этого избежать?
Может, выходом будет завести некоторое кол-во массивов, и в каждый раз за разом вписывать значение?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2009, 08:54     Символьные массивы и их друзья
Посмотрите здесь:

Символьные массивы - C++
Написать и отладить программу для ввода предложения, содержащего несколько круглых скобок. Если число открывающихся скобок равно числу...

Символьные массивы - C++
Ввести свою Фамилию, имя и Отчество, как одно текстовое поле. Определить длину и количество букв &quot;а&quot; в нем. Решить задачу одним из...

Символьные массивы - C++
Ребята, я по некоторих причинах пропустил пару по етой теме, и не знаю толком как работать с символьними масивами. Нужно сделать задание...

Двумерные массивы (+символьные) - C++
Вот 5 задач... необходимо помочь братишке... сам я в С++ не особо силен... Сильно прошу вас помочь мне... За оказанную услугу готов...

Символьные массивы. Сравнение с алфавитом - C++
вечер добрый. задача такая: имеется символьный массив алфавитный(32 кириллица) и символьный массив (размер около 5-10) который...

Символьные массивы (исправить код) - C++
Как удалить комы до первой точки? Я написал код, но от некорректно работает! Мне нужно сдвинуть массив на столько сколько удаляется ком! Но...

Сравнение строк (символьные массивы), игнорируя регистровые различия - C++
Я недавно начал изучать С++ и все не как не пойму что не так с моей программой... Задача: Напишите программу, которая предлагает...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
22.11.2009, 09:59     Символьные массивы и их друзья #2
оставил твои переменные, мог бы ты пояснить строки кода где у тя goto
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
#include <iostream>                            //libr
#include <string>
#include <time.h>
 
using namespace std;
 
int main()
{   
    setlocale(LC_ALL, "Russian");
    srand((unsigned)time(0));                      //rand
    
    //const
    int i=0,j,len=0;
    string o;
    
    
    cout<<"Введите кол-во вопросов: ";
    cin>>i;                                        //i
    string * v1 = new string[i];  // выделяем память
    string * v2 = new string[i];
    for(j=0;j<i;j++)                          //цикл1
    {
        cout<<"Введите вопрос "<<j+1<<": \n";
        cin>>v1[j];
/* что это такое ???        
        frs:                          //Функция рандомизации и определения длины
                k=rand()%i;                   //
                if (k==0) goto frs;           //здесь проблемы с 0 значением,
                while(v1[len])                //исправил, но криво
                    len++;                        //
                sum=k+len;                               //=(*/
        
        
        cout<<"Ответ на вопрос? "<<j+1<<"\n";
        cin>>v2[j];
    }
    cout<<"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";  //=(
    for(j=0;j<i;j++)                           //цикл2
    {
        cout<<"Вопрос "<<j+1<<": ";
        cout<<v1[j]<< endl;
        cout<<"Ответ: "<<endl;
        cin>>o;
        if (o==v2[j]) cout<<"Верно!"<<endl;          //bingo
        else
        {
            cout<<"Правильный: "<<v2[j]<< endl;
        }
        cout<<"\n\n\n\n\n";
    }
            delete [] v1;
    delete [] v2;
    system("pause");
    return 0;
}
Darky
Быдлокодер
507 / 294 / 45
Регистрация: 22.11.2009
Сообщений: 892
Завершенные тесты: 1
22.11.2009, 10:35  [ТС]     Символьные массивы и их друзья #3
Дело в том, что мои вопросы считались с единички, т.е. 1, 2, 3 и т.д., а С++ считает с 0.
0, 1, 2, 3.
В связи с этим вылезали нулевые вопросы, и элемент этого нулевого вопроса был символ, напоминающий твердый знак. Решение заново запускать рандомизацию - это, конечно, быдлокод, но другого решения я не увидел, к сожалению.

Я так понимаю, код Вы написали для 6.0?
На моем 5.2 не компилится, выдавая 7 красных ошибок, а все горе в том, что я незнаю, чем это заменить.

Добавлено через 5 минут
И, кстати, в Вашем коде я так и не увидел, где реализована функция вывода случайного вопроса из введенных раннее
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
22.11.2009, 10:36     Символьные массивы и их друзья #4
ввобще я писал под вижалом, ты листинг ошибок покажи
перво наперво наверно надо у тебя снести 5ую строку моего кода
Darky
Быдлокодер
507 / 294 / 45
Регистрация: 22.11.2009
Сообщений: 892
Завершенные тесты: 1
22.11.2009, 10:47  [ТС]     Символьные массивы и их друзья #5
Некоторое количество я поправил, заменив "j+1" на "j++", что, по сути, одно и то же, убрав пятую строчку Вашего кода и добавив библиотеку stdlib.
Сейчас осталось следующее:

Warn : STRING.h(549,3):Functions containing for are not expanded inline
Warn : STRING.h(557,3):Functions containing while are not expanded inline
Warn : STRING.h(563,3):Functions containing for are not expanded inline
Warn : STRING.h(575,3):Functions containing for are not expanded inline
Warn : STRING.h(742,96):Conversion may lose significant digits
Warn : STRING.h(768,96):Conversion may lose significant digits
Warn : iterator.h(570,72):Conversion may lose significant digits
Warn : iterator.h(570,72):Conversion may lose significant digits
Warn : iterator.h(529,72):Conversion may lose significant digits
Warn : iterator.h(530,72):Conversion may lose significant digits
Warn : iterator.h(531,72):Conversion may lose significant digits
Warn : iterator.h(532,72):Conversion may lose significant digits
Warn : iterator.h(529,72):Conversion may lose significant digits
Warn : iterator.h(530,72):Conversion may lose significant digits
Warn : iterator.h(531,72):Conversion may lose significant digits
Warn : iterator.h(532,72):Conversion may lose significant digits
Warn : string.cc(658,2):Cannot create pre-compiled header: code in header
Error: proj0004.cpp(8,19):Call to undefined function 'setlocale'
Error: proj0004.cpp(8,26):Undefined symbol 'LC_ALL'
Warn : proj0004.cpp(13,18):Use qualified name to access member type 'std::string'
Warn : proj0004.cpp(18,20):Use qualified name to access member type 'std::string'
Warn : proj0004.cpp(18,34):Use qualified name to access member type 'std::string'
Warn : proj0004.cpp(19,20):Use qualified name to access member type 'std::string'
Warn : proj0004.cpp(19,34):Use qualified name to access member type 'std::string'

Warn - желтые, в основном ругаются на string библиотеку
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
22.11.2009, 10:57     Символьные массивы и их друзья #6
ликвидируй 9ую строку setlocale(LC_ALL, "Russian");
Darky
Быдлокодер
507 / 294 / 45
Регистрация: 22.11.2009
Сообщений: 892
Завершенные тесты: 1
22.11.2009, 10:59  [ТС]     Символьные массивы и их друзья #7
Пробовал. Все взрывается.
Info :Transferring to G:\bc5\bin\tlink.exe @g:\bc5\bin\proj0004.r$p
Warn : (1,1):No module definition file specified: using defaults
Warn : (1,1):Possible reference to undefined extern std::rwse_InvalidSizeParam in module proj0004.cpp
Warn : (1,1):Possible reference to undefined extern std::rwse_PosBeyondEndOfString in module proj0004.cpp
Warn : (1,1):Possible reference to undefined extern std::rwse_ResultLenInvalid in module proj0004.cpp
Warn : (1,1):Possible reference to undefined extern std::rwse_StringIndexOutOfRange in module proj0004.cpp
Warn : (1,1):Possible reference to undefined extern std::rwse_UnexpectedNullPtr in module proj0004.cpp
Warn : (1,1):Possible reference to undefined extern std::nullref in module proj0004.cpp
Warn : (1,1):Possible reference to undefined extern std::__rw_stdexcept_NoNamedException in module proj0004.cpp
Error: (1,1):Undefined symbol std::rwse_StringIndexOutOfRange in module proj0004.cpp
Error: (1,1):Undefined symbol std::nullref in module proj0004.cpp
Error: (1,1):Undefined symbol std::rwse_PosBeyondEndOfString in module proj0004.cpp
Error: (1,1):Undefined symbol _system in module proj0004.cpp
Error: (1,1):Undefined symbol std::rwse_InvalidSizeParam in module proj0004.cpp
Error: (1,1):Undefined symbol std::rwse_ResultLenInvalid in module proj0004.cpp
Error: (1,1):Undefined symbol std::rwse_UnexpectedNullPtr in module proj0004.cpp
Error: (1,1):Undefined symbol std::__rw_stdexcept_NoNamedException in module proj0004.cpp
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
22.11.2009, 11:17     Символьные массивы и их друзья #8
пробуй подключать std
типа std::string
если using namespace std; использовать что говорит?
особенности 5.2 не знаю, но STL там быть должен, наверно.
на крайняк, плюнуть на string и переделать всё на char

Добавлено через 10 минут
ещё один момент не заметил, надо не cin для получения вопроса использовать, а getline
cin до первого пробела работает
Darky
Быдлокодер
507 / 294 / 45
Регистрация: 22.11.2009
Сообщений: 892
Завершенные тесты: 1
22.11.2009, 11:45  [ТС]     Символьные массивы и их друзья #9
пробуй подключать std
типа std::string \\Ничего не выходит, тоже самое.

если using namespace std; использовать что говорит?\\ничего не говорит, так же ругается.

Пробовал делать через char - закладывает в элемент массива букву, а не строку. Там все перелопачивать придется

Добавлено через 3 минуты
Error: proj0004.cpp(16,18):Undefined symbol 'getline'

Добавлено через 20 минут
Уважаемый товарищ, я скомпилировал полностью без ошибок в шестом билдере.
Теперь мне бы разобраться с тем, выводиться из предложенных вопросов-ответов должен _случайный_ элемент. Как мне сделать это?
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
22.11.2009, 11:57     Символьные массивы и их друзья #10
вот тут есть пример getline
но опять же 5.2 будет давиться, надо под него адаптировать
случайный есть тоже, тока я не совсем победил, там ли он располагается
но, думаю, разберёшься

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
#include <iostream>                            //libr
#include <string>
#include <time.h>
 
using namespace std;
 
int main()
{       
    setlocale(LC_ALL, "Russian");
    srand((unsigned)time(0));                      //rand
 
    //const
    int i=0,j,len=0, k;
    string o;
 
 
    cout<<"Введите кол-во вопросов: ";
    cin>>i;                                      //i
    string * v1 = new string[i];  // выделяем память
    string * v2 = new string[i];
    for(j=0;j<i;j++)                          //цикл1
    {
        cout<<"Введите вопрос "<<j+1<<": "<<endl;
        cin.ignore();  // игнорирует символ перевода строки после ввода данных
        getline(cin, v1[j],'\n');       // получает строку до символа первода строки
 
        cout<<"Ответ на вопрос? "<<j+1<<"\n";
        cin>>v2[j];
    }
    cout<<"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";  //=(
    for(j=0;j<i;j++)                           //цикл2
    {
        k=rand()%i;
        cout<<"Вопрос "<<k+1<<": ";
        cout<<v1[k]<< endl;
        cout<<"Ответ: "<<endl;
        cin>>o;
        if (o==v2[k]) cout<<"Верно!"<<endl;          //bingo
        else
        {
            cout<<"Правильный: "<<v2[k]<< endl;
        }
        cout<<"\n\n\n\n\n";
    }
    delete [] v1;
    delete [] v2;
    system("pause");
    return 0;
}
Darky
Быдлокодер
507 / 294 / 45
Регистрация: 22.11.2009
Сообщений: 892
Завершенные тесты: 1
22.11.2009, 13:12  [ТС]     Символьные массивы и их друзья #11
TanT, все отлично работает! И рандом заработал, стоило добавить библиотеку stdlib.h
А теперь вопрос на засыпку - как сделать так, чтобы выведенные вопросы-ответы во втором цикле не повторялись?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2009, 13:55     Символьные массивы и их друзья
Еще ссылки по теме:

Функции друзья и классы друзья - C++
Пробую разбираться с друзьями в С++(друзьями -классами и друзьями функциями). Казалось бы все просто: класс/функция описанные в классе с...

Друзья класса. - C++
Добрый вечер, знатоки! Прошу вашей помощи, вроде бы ничего сложного, запутался в указателях. Итак, постановка задачи: Есть 2 класса:...

Друзья класса - C++
Задание на друзей класса: Vect a1(3,5), a2(4), a3(3), a4; a1.prn(); // 5 6 7 a2.prn(); // 0 0 0 0 a3.prn(); // 0 0 0 ...

Друзья класса - C++
В классе объявлены такие прототипы friend ostream &amp;operator&lt;&lt; (ostream &amp;, const Complex &amp;); friend istream &amp;operator&gt;&gt; (istream &amp;,...

Друзья, я нуждаюсь в советах - C++
Здравствуйте Друзья, я нуждаюсь в советах. Мне было всегда интересно. Вот как же программисты создают разные сложные программы,...


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

Или воспользуйтесь поиском по форуму:
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
22.11.2009, 13:55     Символьные массивы и их друзья #12
то есть тебе надо случайным образом выбрать все вопросы без поторений? есть здесь на форуме обсуждение подобного. тему тока забыл забыл, что-то типа заполнения массива случайными не повторяющимися числами.

щас повспоминаю

Добавлено через 5 минут
вот похожая, но где-то ещё была подобная
Yandex
Объявления
22.11.2009, 13:55     Символьные массивы и их друзья
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru