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

Структура CandyBar - C++

Восстановить пароль Регистрация
 
Fooly
 Аватар для Fooly
21 / 17 / 1
Регистрация: 26.03.2012
Сообщений: 147
12.07.2012, 19:05     Структура CandyBar #1
Первая задачка решилась сама собой, был не внимателен в коде

Добавлено через 30 минут
С первой задачкой разобрался, но тут с другой проблема вылезла. Тоже по функциям.
Компилируется без проблем, но при вводе строки и нажатии enter выдаёт ошибку и на этом всё
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
#include <iostream>
#include <cctype>
#include <string>
using namespace std;
string str (string &num);
int main()
{
    string kil;
    string kol = "q";
    cout << "Vvedite stroku (q -> for quit): ";
    cin >> kil;
    if(kil==kol)
        cout << "Dosvidos";
    else {
    str(kil);
    cout << endl << kil;
    cin>>kil;}
    for (int i=0; i<100; i++)
        cin.get();
    return 0;
}
string str (string &num)
{
    string op;
    for (int i=0;;i++)
        op[i]=toupper(num[i]);
    return op;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.07.2012, 19:05     Структура CandyBar
Посмотрите здесь:

C++ Структура
C++ структура
C++ структура
Структура C++
C++ структура
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Marko
9 / 9 / 0
Регистрация: 05.07.2012
Сообщений: 38
12.07.2012, 19:26     Структура CandyBar #2
Используй std::getline.
C++
1
2
std::string s;
std::getline(std::cin, s);
Будет принимать строку до нажатия enter'а.

C++
1
    for (int i=0;;i++)
Откуда программа знает где остановиться?
Fooly
 Аватар для Fooly
21 / 17 / 1
Регистрация: 26.03.2012
Сообщений: 147
12.07.2012, 19:45  [ТС]     Структура CandyBar #3
Цитата Сообщение от Marko Посмотреть сообщение
Используй std::getline.
C++
1
2
std::string s;
std::getline(std::cin, s);
Будет принимать строку до нажатия enter'а.

C++
1
    for (int i=0;;i++)
Откуда программа знает где остановиться?
что-то getline не помог.
Я подправил код уже, но всё равно та же шляпа. Ошибка где-то в цикле строк 26-27
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
#include <iostream>
#include <cctype>
#include <string>
using namespace std;
string str (string &num);
int main()
{
    string kil;
    string kol = "q";
    cout << "Vvedite stroku (q -> for quit): ";
    cin>>kil;
    if(kil==kol)
        cout << "Dosvidos";
    else {
    str(kil);
    cout << endl << kil;
    cin>>kil;}
    for (int i=0; i<100; i++)
        cin.get();
    return 0;
}
string str (string &num)
{
    string op;
    int len = num.size();
    for (int i=0;i<len;i++)
        op[i]=toupper(num[i]);
    return op;
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.07.2012, 20:45     Структура CandyBar #4
Цитата Сообщение от Fooly Посмотреть сообщение
Я подправил код уже, но всё равно та же шляпа. Ошибка где-то в цикле строк 26-27
Вместо:
C++
1
op[i]=toupper(num[i]);
поставьте
C++
1
op.push_back(toupper(num[i]));
У вас обращение по индексу к пустой строке получается.
Fooly
 Аватар для Fooly
21 / 17 / 1
Регистрация: 26.03.2012
Сообщений: 147
12.07.2012, 20:50  [ТС]     Структура CandyBar #5
Цитата Сообщение от alsav22 Посмотреть сообщение
Вместо:
C++
1
op[i]=toupper(num[i]);
поставьте
C++
1
op.push_back(toupper(num[i]));
У вас обращение по индексу к пустой строке получается.
а что означает op.push_back?
Мне нужно чтобы строку переводиол в верхний регистр. Заменил строчку - перестало выкидывать, но в верхний регистр не загоняет ниодного символа
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.07.2012, 21:04     Структура CandyBar #6
Идея непонятна. Переводите в верхний регистр и нигде не используете.

Добавлено через 30 секунд
Цитата Сообщение от Fooly Посмотреть сообщение
а что означает op.push_back?
Поместить в конец строки op.

Добавлено через 2 минуты
Цитата Сообщение от Fooly Посмотреть сообщение
Мне нужно чтобы строку переводиол в верхний регистр
Чтобы увидеть перевод, запишите 15 стороку так:
C++
1
cout << str(kil) << endl;
Добавлено через 1 минуту
Я же выше написал: переводите в верхний регистр и нигде не используете возвращаемое значение.

Добавлено через 5 минут
А, в 18 - 19 строках, что должно быть?
Fooly
 Аватар для Fooly
21 / 17 / 1
Регистрация: 26.03.2012
Сообщений: 147
12.07.2012, 21:12  [ТС]     Структура CandyBar #7
Цитата Сообщение от alsav22 Посмотреть сообщение
Идея непонятна. Переводите в верхний регистр и нигде не используете.

Добавлено через 30 секунд

Поместить в конец строки op.

Добавлено через 2 минуты

Чтобы увидеть перевод, запишите 15 стороку так:
C++
1
cout << str(kil) << endl;
Добавлено через 1 минуту
Я же выше написал: переводите в верхний регистр и нигде не используете возвращаемое значение.

Добавлено через 5 минут
А, в 18 - 19 строках, что должно быть?
Я хотел каждый символ полченной строки перевести в верхний регистр с помощью toupper и присвоить новой строке op. И потом эту строку возвращаю return op.
18-19 cтроки нужны, чтобы программа не закрывалась во время ввода.
Fooly
 Аватар для Fooly
21 / 17 / 1
Регистрация: 26.03.2012
Сообщений: 147
12.07.2012, 21:15  [ТС]     Структура CandyBar #8
Условие задачи ниже
Миниатюры
Структура CandyBar  
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
12.07.2012, 21:18     Структура CandyBar #9
Вот вариант со string:
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
#include <iostream>
#include <cctype>
#include <string>
#include <Windows.h>
 
using namespace std;
 
string str_upper(string&);
 
int main()
{
    SetConsoleCP (1251); SetConsoleOutputCP (1251);
    string input;
    cout << "Введите строку (q для выхода): ";
    getline(cin, input);
    if(input == "q" || input == "Q")
        cout << "Прощавайте"<<endl;
    else 
        cout <<"До обработки: "<<input<<endl
        <<"После обработтки: "<<str_upper(input) <<endl;
    system("pause");
    return 0;
}
string str_upper(string& num)
{
    string temp;
    for (int i=0; i<num.size(); i++)
        temp.push_back(toupper(num[i]));
    return temp;
}
Fooly
 Аватар для Fooly
21 / 17 / 1
Регистрация: 26.03.2012
Сообщений: 147
12.07.2012, 21:22  [ТС]     Структура CandyBar #10
Цитата Сообщение от yuron_477 Посмотреть сообщение
Вот вариант со string:
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
#include <iostream>
#include <cctype>
#include <string>
#include <Windows.h>
 
using namespace std;
 
string str_upper(string&);
 
int main()
{
    SetConsoleCP (1251); SetConsoleOutputCP (1251);
    string input;
    cout << "Введите строку (q для выхода): ";
    getline(cin, input);
    if(input == "q" || input == "Q")
        cout << "Прощавайте"<<endl;
    else 
        cout <<"До обработки: "<<input<<endl
        <<"После обработтки: "<<str_upper(input) <<endl;
    system("pause");
    return 0;
}
string str_upper(string& num)
{
    string temp;
    for (int i=0; i<num.size(); i++)
        temp.push_back(toupper(num[i]));
    return temp;
}
Сейчас нету возможности проверить код, но вроде моя функция по ппереводу в верхний регистр похожая (после замены на op.push_back) Но она ничего не подымала =(
Ksan
12.07.2012, 21:36
  #11

Не по теме:

Fooly, какой вы все таки извращенец...

Fooly
 Аватар для Fooly
21 / 17 / 1
Регистрация: 26.03.2012
Сообщений: 147
12.07.2012, 21:37  [ТС]     Структура CandyBar #12
Цитата Сообщение от Ksan Посмотреть сообщение

Не по теме:

Fooly, какой вы все таки извращенец...

всё в норме, всё поднялось, нашёл ошибку
Ksan
12.07.2012, 21:41
  #13

Не по теме:

Fooly, я о стиле писания кода. Какой-то он извращенский...

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2012, 22:59     Структура CandyBar
Еще ссылки по теме:

C++ Структура CandyBar
C++ структура
Напишите программу, которая создает массив из трех структур CandyBar C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.07.2012, 22:59     Структура CandyBar #14
Цитата Сообщение от Fooly Посмотреть сообщение
Условие задачи ниже
Если смотреть по примеру в задаче, то ввод должен быть в цикле, из которого выход по нажатию "q".

Добавлено через 12 минут
код
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
#include <iostream>
#include <cctype>
#include <string>
#include <Windows.h>
 
using namespace std;
 
string str_upper(string&);
 
int main()
{
    setlocale(0, ""); // без этого почему-то русские не переводятся в верхний.
    SetConsoleCP (1251); 
    SetConsoleOutputCP (1251);
    
    string input;
    do
    {
    cout << "Введите строку (q для выхода): ";
    getline(cin, input);
    if(input == "q" || input == "Q")
        {
        cout << "Прощавайте"<<endl;
        break;
        }
    else 
        cout <<"До обработки: "<<input<<endl
        <<"После обработтки: "<<str_upper(input) <<endl;
    } while (true);
    system("pause");
    return 0;
}
string str_upper(string& num)
{
    string temp;
    for (int i=0; i<num.size(); i++)
        temp.push_back(toupper(num[i]));
    return temp;
}
Yandex
Объявления
12.07.2012, 22:59     Структура CandyBar
Ответ Создать тему
Опции темы

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