Retorno de função

11 respostas
douglaskd

Pessoal eu estou iniciando na área de programação e gostaria de saber como funciona o retorno de função, como parâmetro para o while....

EX:

function retornar()
{
return true......
return false.....
}

int c;
while(c = retornar()){
print(c);
}

como seria a montagem de dessa função retornar?
algo similar a while(array = mysql_fetch_array()).

Obrigado

11 Respostas

luciano2

Bem cara na a lógica parece estar correta, mas sua função tem que definir o tipo de retorno que no caso deveria ser boolean

public boolean retornar() { return true...... return false..... }

Isso se for em java, se for em C você deve usar boolean retornar(void)

Qual a linguagem que você está utilizando?

douglaskd

então luciano@@, estou usando o C padrão.

eu queria entender a logica mesmo...., para que eu consiga criar funções com esse tipo de retorno

eu tenho uma ideia que seria mais ou menos isso:

por exemplo uma função que vai passando de caractere em caractere, e o retornando pra função que o chama,e retorna falso ao chegar no final.

char Caracteres(char string[]){

...............

return CaractereAtual;

ou

return 0;
................

}
char string[] = "aqui vao o texto contendo os caracteres que vao ir para a funcao";

while(cAtual = Caracteres(string[]))
{
printf(cAtual);
}
o while creio que vá funcionar o problema é na função que eu nao sei como seria implementada...
douglaskd

eu sempre usei whiles desse tipo, mais ainda não consegui descobrir como essas funções funcionam :cry:

luciano2

Cara se você der um return na função morreu ai. Você sempre vai retornar o primeiro caracter.

return encerra a função.

Se for C o que você poderia fazer era passar o ponteiro do inicio do vetor e ir incrementando a cada passagem de parametro, mas isso não ia fazer muitos sentido.

tem outra coisa se você for fazer atribuição como condição, o resultado da atribuição tem que ser boolean

Ex:
boolean b  = true;
while( c = b){
     ações.....
}
ou simplementes
while(b){
     ações.....
}
você pode fazer também
char a = 'L'
while( (b = a) != 'M'){

}
entenderam?
ViniGodoy

Aí tem duas operações:
a) A atribuição, que retorna o valor que foi atribuído;
b) A função em si;

Ainda usa duas peculiaridades do C: O valor 0 significa falso. E existe um caracter ao final de cada string, para dizer que ela acabou, que é justamente o \0.

Ou seja, suponha o seguinte programa:

int ind = 0;

char getNextChar(char* str) {
    return str[ind++];
}

while (char ch = getNextChar("Olá enfermeira!")) {
    printf("%s", ch);
}

O que esse programa faz:

O while chama o getNextChar, que retorna um caracter qualquer da String.
Esse caracter é atribuído à variável ch.
Como a atribuição retorna o que foi atribuído, esse valor também é retornado para o while.

Como qualquer caracter tem algum valor da tabela ascii, esse valor é interpretado como true.

A medida que a função avança, ela eventualmente chega ao final da string.
Chegando lá, o caracter encontrado é o \0
0 É atribuído a variável ch
0 é retornado ao while. Como 0 é false, o programa sai do while.

Rode num depurador e vc verá isso acontecendo.

douglaskd

excelente é exatamente isso, só que aqui compila mais nao roda, aparece mensagem "program abomination termination" +- isso....

#include <stdio.h>

char getNextChar(char* str) {
return str[ind++];
}

void main(){

int ind = 0;

char ch;

while(ch = getNextChar("Ol  enfermeira")){
printf("%s",ch);
}
}

e tambem.....

#
include <stdio.h>

char getNextChar(char* str) {
int ind = 0;
return str[ind++];
}

void main(){

char ch;

while(ch = getNextChar("Ol  enfermeira")){
printf("%s",ch);
}
}

esses 2 não funcionam, eu estou com dúvidas na declaração da variavel "ind"...

E

douglaskd:
mensagem “program abomination termination” ± isso…

É mais ou menos isso mesmo - acho que seria “abnormal” … Mas deixa de “rebolation” que o negócio é “faturation”.

De qualquer maneira, char != char * em C, você tem de tomar bastante cuidado. (Dá a impressão que você não fez o “copy & paste” direito do seu programa, porque desse jeito que está ele não compila mesmo).

Por isso, ao usar printf nesse caso, você tem de usar

printf ("%c", ch);

(senão dá “program abnormal termination mesmo”. )

Ou, o que dá menos problema nesse caso em particular,

putchar (ch);
douglaskd

hehe nao tinha percebido o %s,

acho que daki pra frente eu ja consigo fazer alguns testes e estudar uns codigos mais complexos…

Obrigado a todos!!!

luciano2

Seria interessante saber se nosso colega está com os conhecimentos em dia sobre ponteiros e variaveis globais em C.
Pois estes conhecimentos são extremamente necessários para resolver problemas desse tipo.

ViniGodoy

Ops… foi mal pelo %s

Eu postei o código no meu trabalho, então dificilmente abro uma IDE, compilo e testo. De qualquer forma, a teoria é aquilo ali.
Só que no C não seria possível também declarar a variável dentro do while, como fiz ali.

douglaskd

hehe pois é, estudei muito pouco sobre ponteiros, na verdade ainda nao tinha achado uma forma util de usa-los…até agora.

Criado 12 de julho de 2010
Ultima resposta 12 de jul. de 2010
Respostas 11
Participantes 4