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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с функцией 
:(
    Опции темы
Robin
Дата 9.1.2008, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



задача функции менять все буквы кроме последней и первой, благополучно меняет первые два слова, потом выводит первый символ третьего слова и зависает. Как исправить?
Код

#include "stdafx.h"
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
//rand()%(strlen(abcd)-2)+1
int findint(int a[], int b)
{
int c = 0;
for(c = 0; a[c]; ++c)
{
     if(a[c] == b)return c;
}
return -1;
}

void wordformation(char text[])
{
//char tempbuff[100];
int charalph[100];
int b, i, c, d = 1, g = -1, m, a;
char firstchar, lastchar, tempchar;

firstchar = text[0];
b = strlen(text);
printf("%c",firstchar);
for(m = 0; m < b - 2;)
{
     a = rand()%(b-2)+1;
     if(findint(charalph, a) == -1)
     {
               printf("%c", text[a]);
               charalph[++g] = a;
               ++m;
     }
}
lastchar  = text[b-2];
printf("%c ", lastchar);

//b = 0;
//memset(charalph, ' ', sizeof(charalph)-1);

}

void main()
{

wordformation("resultatives");

wordformation("extrime");

wordformation("musik");

}


PM MAIL   Вверх
Fazil6
Дата 9.1.2008, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

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



скорее всего повисает в этом месте
Код

a = rand()%(b-2)+1;
     if(findint(charalph, a) == -1)
     {
               printf("%c", text[a]);
               charalph[++g] = a;
               ++m;
     }

твой счетчик инкрементируется только при выполнении условия и видимо оно все время не выполняется и выйти из цикла не может
PM MAIL   Вверх
Robin
Дата 9.1.2008, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



нет, ошибка явно не там. во первых, функция ВСЕГДА работает нормально 1 раз со словом любого размера.
во вторых, он инкременируется только если число, сгенерированое rand() не было использовано до этого(а иначе смысла нету)
PM MAIL   Вверх
Fazil6
Дата 9.1.2008, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

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



Цитата(Robin @  9.1.2008,  17:17 Найти цитируемый пост)
нет, ошибка явно не там.

а где же она? больше негде зависать

Цитата(Robin @  9.1.2008,  17:17 Найти цитируемый пост)
функция ВСЕГДА работает нормально 1 раз со словом любого размера

ну и что? а я вот у себя запустил и у меня виснет в середине первого слова

Цитата(Robin @  9.1.2008,  17:17 Найти цитируемый пост)
во вторых, он инкременируется только если число, сгенерированое rand() не было использовано до этого(а иначе смысла нету)

ну это уже проблемы твоего алгоритма
PM MAIL   Вверх
MTWizard
Дата 9.1.2008, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 8.10.2007
Где: Київ

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



Найденные ошибки:
1. Строка 20: массив charalph[100] не инициализируется, нужно так:
Код

int charalph[100] = {0};

2. Строка 37, где ищется последний символ. Индекс последнего символа в строке есть b - 1, а не b - 2:
Код

lastchar  = text[b-1];


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


Новичок



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

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



MTWizard, действительно, ошибка лиш в инициализации массива. огромное спасибо
PM MAIL   Вверх
JackYF
Дата 10.1.2008, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Robin, помечай тему решённой.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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