Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не правильный тип возвращаемого значения функции 
V
    Опции темы
n199a
Дата 28.1.2014, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 17.11.2011

Репутация: нет
Всего: нет



Цитата(xvr @  28.1.2014,  08:36 Найти цитируемый пост)
Очищать. cin.ignore(1000,'\n')

Не работал просто с таким. И по этому возникает сопутствующий вопрос - в какое место в коде вставлять?
PM MAIL   Вверх
xvr
Дата 28.1.2014, 12:25 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(n199a @  28.1.2014,  09:13 Найти цитируемый пост)
в какое место в коде вставлять? 

Перед  cin.getline()

PM MAIL   Вверх
n199a
Дата 28.1.2014, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 17.11.2011

Репутация: нет
Всего: нет



Цитата(xvr @  28.1.2014,  12:25 Найти цитируемый пост)
Перед  cin.getline()

Нету такого в коде.
PM MAIL   Вверх
xvr
Дата 28.1.2014, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(n199a @  28.1.2014,  12:29 Найти цитируемый пост)
Нету такого в коде. 

У меня в примере есть. У вас стоит gets() - это работать нормально не будет

PM MAIL   Вверх
n199a
Дата 28.1.2014, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 17.11.2011

Репутация: нет
Всего: нет



Сделал так, но теперь не меняет местами:
Код

int obr(void)
{
    int nW = 0;
    char str[80], *words[100] = {NULL};
    const char sim[] = ".,/";

    cout << "Vvedite stroku: ";
    cin.ignore(1000,'\n');
    cin.getline(str, 80);
    
    words[nW] = strtok(str, sim);
    
    while(words[nW] != NULL) {
        nW ++;
        words[nW] = strtok(NULL, sim);
    }
    
    for(int i = nW; i >= 0; i--)
        puts(words[i]);
        
    return 0;
}

PM MAIL   Вверх
akizelokro
Дата 29.1.2014, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 1
Всего: 5



int obr()
{
  cout << "Vvedite stroku: ";
  string s;
  cin >> s;
  char * word = s.data();
  vector <char *> for_reverse; 
  const char delimiter[] = ".,";  // не попадёт /n
  while(word = strtok(word, delimiter)
  {
     for_reverse.push_back(word);
  }
  for(auto  rit = for_reverse.rbegin(); rit!= for_reverse.rend(); ++rit)
    cout >> *rit  >> " ";
  cout >> endl;
}

// звязывайте уже с этим
// первоначально шёл и такой коад как 
// char * s;
// cin >> s. но код был реально плох.

Это сообщение отредактировал(а) akizelokro - 29.1.2014, 00:41


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
n199a
Дата 29.1.2014, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 17.11.2011

Репутация: нет
Всего: нет



Цитата(akizelokro @  29.1.2014,  00:38 Найти цитируемый пост)
int obr()
{
  cout << "Vvedite stroku: ";
  string s;
  cin >> s;
  char * word = s.data();
  vector <char *> for_reverse; 
  const char delimiter[] = ".,";  // не попадёт /n
  while(word = strtok(word, delimiter)
  {
     for_reverse.push_back(word);
  }
  for(auto  rit = for_reverse.rbegin(); rit!= for_reverse.rend(); ++rit)
    cout >> *rit  >> " ";
  cout >> endl;
}

А без векторов обойтись можно?
PM MAIL   Вверх
akizelokro
Дата 29.1.2014, 00:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 1
Всего: 5



ах, да, 
сin >> ругается на два char* подряд.

Добавлено @ 00:59
можно. используя вообще Сшниый стиль.

const char delimiter[] = ".,";
puts("Taschi stroku:");
char * str = gets();

char * pointers = calloc((strlen(str) + 1) * sizeof(char *)); // а, лень free делать. и sizeof надо по трезвяни вспомнить
char * word = str;
int i = 0;
while(word = strtok(word, delimiter))
{
    (pointers + i * sizeof(char *)) = word;
    i++;
}
for(int q = (strlen(pointers)/sizeof(char *)); q > 0; q--)
{
    printf("%s ", pointers + (q - 1) * sizeof(char *));
//  puts(pointers + (q - 1) * sizeof(char *));
//  puts(" ");
}

Пару раз откомпильнуть, а так пример кажисть работоспособный.
Мне тут понравилось самому как я у указателей стал длину строки брать  smile 

Это сообщение отредактировал(а) akizelokro - 29.1.2014, 01:25


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
akizelokro
Дата 29.1.2014, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 1
Всего: 5



Ну, тут малость намутил, но после пары компиляций (и правки ошибок) работать должно.  smile 

Это сообщение отредактировал(а) akizelokro - 29.1.2014, 01:25


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
xvr
Дата 29.1.2014, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(n199a @  28.1.2014,  12:46 Найти цитируемый пост)
Сделал так, но теперь не меняет местами:

Потому что у вас теперь разделитель не пробел, а набор запятых (строка 5 в листинге). Так что у вас получается ровно 1 слово (во всю строку). И менять местами просто нечего.

PM MAIL   Вверх
n199a
Дата 29.1.2014, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 17.11.2011

Репутация: нет
Всего: нет



Цитата(xvr @  29.1.2014,  10:33 Найти цитируемый пост)
Потому что у вас теперь разделитель не пробел, а набор запятых (строка 5 в листинге). Так что у вас получается ровно 1 слово (во всю строку). И менять местами просто нечего.

Точно, забыл, что менял на запятую, точку и слэш  smile 
Благодарю всех за участие  smile 

Это сообщение отредактировал(а) n199a - 29.1.2014, 14:50
PM MAIL   Вверх
akizelokro
Дата 31.1.2014, 02:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 1
Всего: 5



разоврался с пойнтерами, ещё вчера хотел заметить.
но пример работосопсобный, и ненамного длиньше, чем с С++


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0516 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.