Ir ao conteúdo
  • Cadastre-se

[C] - Dúvida com condição estranha em laços


Trying
Ir à solução Resolvido por vangodp,

Posts recomendados

Não consigo entender quando é colocado um vetor de strings como condição de um laço. Exemplo:

int i;char string[]= {"String qualquer"}; for(i=0; string[i]; i++)      //Essa condição no laço for faz com que ele entre em loop até imprimir a ultima letra da string. Mas por que?{        printf("%c", string[i]);}

Outro exemplo, o que acontece na função axuliar findCharactere no while?

#include <stdio.h>#include <stdlib.h>#include <conio.h> /* Funções que retornam ponteiros */ // --- Protótipo da Função Auxiliar ---char *findCharactere(char caractere, char *str); int main(int argc, char *argv[]){    char frase[80];    char chr, *pointer;        printf("\nDigite uma frase: ");    gets(frase);    printf("Digite um caractere: ");    chr = getche();    pointer = findCharactere(chr, frase);        if(pointer) printf("\n\n%s\n\n", pointer); //Se encontrar correspondência, imprimi a frase a partir dela    else printf("\n\nNenhuma paridade\n\n");   system("PAUSE");   return 0;} // end main  // --- Desenvolvimento da Função Auxiliar char *findCharactere(char caractere, char *str){     int counter = 0;          while((caractere != str[counter]) && (str[counter] != '\0')) counter++; //O que esta sendo comparado?          if(str[counter]) return (&str[counter]); //Se houver correspondência , retorna o ponteiro para a localização          else return (char *) '\0'; //Senão, retorna um ponteiro nulo          } //end function

gostaria que se possível alguém me desse um norte, o que o string representa para o laço? Sei que string[0] é o primeiro caracter da string, mas não entendo a lógica de comparação do laço.

 

Muito Obrigado!

 

 

Link para o comentário
Compartilhar em outros sites

  • Solução

por que basicamente um string está composto desta forma "isso é um string\0". Esse '\0' (NULL) é o que vai logo ao final do string e faz com que pare. em outras palavras e o mesmo que string != '\0'

int i;char string[]= {"String qualquer"}; for(i=0; string[i] != '\0'; i++)      //Essa condição no laço for faz com que ele entre em loop até imprimir a ultima letra da string. Mas por que?{        printf("%c", string[i]);}

Ou mais fácil de entender:

int i;char string[]= {"String qualquer"}; for(i=0; string[i] != 0; i++)      //Essa condição no laço for faz com que ele entre em loop até imprimir a ultima letra da string. Mas por que?{        printf("%c", string[i]);}

Esse nulo são as funções como scanf que colocam ele de forma implícita sem que você saiba, porém ele existe. Por que existe esse null? Como você acha que o printf sabe onde tem que parar? Imagine que eu crio char string[1000] = "Hello"; Só usei 4, porém printf não sai imprimindo 1000 chars não é? Então... É porque quando eu declaro um char string[1000] = "Hello";, o programa vai logo depois da ultima letra e bota o nulo! Em outras palavras fica char string[1000] = "Hello\0";. Ok B)

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!