Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2014, 16:34   #1
nwhta
Форумчанин
 
Регистрация: 30.08.2013
Сообщений: 153
По умолчанию Обьясните

Код:
#include <stdio.h>
int find_letter(char *str, char letter)
{
	if (*str == '\0')
		return;
	find_letter(str+1, letter);
	if (*str == letter)
	{
		printf("letter is found\n");
		return 1;                        
	}
}
void main()
{
	char str[10] = "I walkedB";
	char letter;
	printf("Enter character to find a letter\n");
	scanf("%c", &letter);
	printf("%d", find_letter(str, letter));

}
пожалуйста объясните почему на выходе я получаю:

"letter is found"
8643526
больше знаю, лучше сплю)

Последний раз редактировалось ACE Valery; 07.11.2014 в 17:40.
nwhta вне форума Ответить с цитированием
Старый 07.11.2014, 16:42   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Из-за отсутствия возвращаемого значения во всех случаях завершения вызванной функции. Только при "is found" вы возвращаете 1. Так что если введете I, то и получите 1.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 07.11.2014 в 16:49.
Alex11223 вне форума Ответить с цитированием
Старый 07.11.2014, 17:37   #3
nwhta
Форумчанин
 
Регистрация: 30.08.2013
Сообщений: 153
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Из-за отсутствия возвращаемого значения во всех случаях завершения вызванной функции. Только при "is found" вы возвращаете 1. Так что если введете I, то и получите 1.

объясните на примере пожалуйста
больше знаю, лучше сплю)
nwhta вне форума Ответить с цитированием
Старый 07.11.2014, 18:14   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

На каком примере? Вы вызвали функцию, она (а не те, которые она рекурсивно вызвала) ничего не вернула, а вы пытаетесь прочитать ее возвращаемое значение, вот и получаете мусор.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 07.11.2014, 18:17   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
объясните на примере пожалуйста
Напиши так:
Код:
int find_letter(char *str, char letter)
{
	if (*str == '\0')
		return;
	find_letter(str+1, letter);
	if (*str == letter)
	{
		printf("letter is found\n");
		return 1;                        
	}
printf("Внимание: Ни один из ретурнов не вызван - функция ничего не вернет.");
}
И убедись что будут случаи, когда этот принтф сработает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.11.2014, 20:11   #6
nwhta
Форумчанин
 
Регистрация: 30.08.2013
Сообщений: 153
По умолчанию

Код:
int find_letter(char *str, char letter)
	{
		if (*str == '\0')
			return 0;
		find_letter(str + 1, letter);


		if (*str == letter)
		{
			return 1;
		}
		return 0;
	}
вроде бы понял но все равно не работает, на букву w пишет 0(((((
Код:
#include <stdio.h>
int find_letter(char *str, char letter)
{
	if (*str == '\0')
		return 0;
	find_letter(str + 1, letter);


	if (*str == letter)
	{
		return 1;
	}
	return 0;
}
void main()
{
	char str[10] = "I walkedB";
	char letter;
	printf("Enter character to find a letter\n");
	scanf("%c", &letter);
	printf("%d", find_letter(str, letter));
}
выкладываю весь код, может ошибку увидите, я ищу и не нахожу..............
больше знаю, лучше сплю)

Последний раз редактировалось Stilet; 07.11.2014 в 20:46.
nwhta вне форума Ответить с цитированием
Старый 07.11.2014, 20:51   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
я ищу и не нахожу
А ее и нет. find_letter() работает именно так как ты ее и описал. Т.е. сравнивается первый символ строки с заявленным символом. Первый символ у тебя I. Понятное дело что возвращается 0, ибо.. Ибо отладчиком ты так и не научился пользоваться )))
Ладно. Подскажу, все равно сам не догадаешься:
*str == letter это не поиск символа в строке, это стравнеие одного символа в строке. А дял поиска по всей строке тебе нудно использовать либо цикл, либо strstr(). Намек понял?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.11.2014, 21:31   #8
nwhta
Форумчанин
 
Регистрация: 30.08.2013
Сообщений: 153
По умолчанию

Код:
int find_letter(char *str, char letter)	
{
		if (*str == '\0')
			return 0;
		if (*str == letter)
			return 1;
		return find_letter(str + 1, letter);
}
вот ответ нашел, только не как не пойму почему ответ в ретурне записан?
объясните пожалуйста..............
больше знаю, лучше сплю)

Последний раз редактировалось Stilet; 07.11.2014 в 21:35.
nwhta вне форума Ответить с цитированием
Старый 07.11.2014, 21:34   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Потому что это рекурсивный вызов функции. Ей передается последовательно очередной символ строки, пока не будет найден конец строки или нужный символ.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.11.2014, 21:38   #10
nwhta
Форумчанин
 
Регистрация: 30.08.2013
Сообщений: 153
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Потому что это рекурсивный вызов функции. Ей передается последовательно очередной символ строки, пока не будет найден конец строки или нужный символ.
Код:
#include <stdio.h>
int find_letter(char *str, char letter)
{
	if (*str == '\0')
		return 0;
	


	if (*str == letter)
	{
		return 1;
	}
	find_letter(str + 1, letter);
}
void main()
{
	char str[10] = "I walkedB";
	char letter;
	printf("Enter character to find a letter\n");
	scanf("%c", &letter);
	printf("%d", find_letter(str, letter));
}
а так это не рекурсивная последовательность?
больше знаю, лучше сплю)

Последний раз редактировалось Stilet; 07.11.2014 в 21:43.
nwhta вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обьясните noxior Общие вопросы C/C++ 1 13.02.2012 00:40
Обьясните! Andrey770 Паскаль, Turbo Pascal, PascalABC.NET 2 14.05.2011 13:07
Обьясните FreeZeT Помощь студентам 3 15.06.2010 04:27
обьясните!!!! gnom63 Помощь студентам 1 12.03.2009 14:56
Обьясните... Droid Общие вопросы Delphi 4 12.05.2008 12:57