Ir ao conteúdo
  • Cadastre-se

Duvidas: String & Switch #C


HardCode

Posts recomendados

Boa Tarde,

 

Existe alguma forma em LINGUAGEM C de definir varias strings dentro delas? em outras linguagens existe isso, mas e em C ??

 

exemplo:

char Strings[] = "Segunda","Terça","Quarta","Quinta","Sexta";

printf("Hoje dia -> %s",String[Blablanla]); //EXEMPLO, eu sei que tem o Time.h

 

Por que fica muito embaraçado fazer linha por linha isso, tem como?

 

Outra duvida, no caso do Switch, existe alguma forma de colocar numeros na case DE 1 .. 10, de 20 ... 30, de 40 ... 50 ...

Eu ando estudando muito mas não encontro nada a respeito nessa Linguagem ( C ) , existe alguma forma ? por que imagina só, ter de fazer case por case disso...

 

switch(Exemplo)
{
 case 1..10: 
 case 20..40:
}

Existe isso? ou algum tipo de atalho, sem ter de definir linha por linha, cada case ou cada if ? 

no caso, existem varias linguagens que utilizam no caso do CASE isso... números até outros números.. mas em C existe?

 

Link para o comentário
Compartilhar em outros sites

@HardCode

Existe, é uma matriz de chars.

exemplo em C:

char nome[13][10] = {"zero", "Janeiro", "Fevereiro", "Marco", "Abril", "Maio",
                      "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"
                     };

Você acessaria a string assim:
 

printf("%s", nome[i]); // i seria uma variavel int

Nesse caso essa matriz funciona como um vetor de 13 posições, acessadas de nome[0]...nome[12];

caso quisesse acessar algum char de uma das 13 strings, você usaria:
 

nome[0][Pos_char] = 'A';

if ( nome[0][Pos_char] == 'A')
  printf("essa posicao eh: A");

Nesse exemplo eu estou acessando a string na posição 0 do vetor que vai de 0~12, e estou acessando uma posição inteira "Pos_char" dessa palavra.

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

Ah sim, eu havia me esquecido completamente das matrizes

Mas no caso do Switch, tem como definir um número até o número X em case?

 

Exemplo:

 

switch(Exemplo)
{
  case 0 até 10:
  case 11 até 20:
  case 21 até 55:
  ...
}

Existe alguma forma de fazer isso? sem ter de fazer if por if... ?

Obrigado pela ajuda ;)

Link para o comentário
Compartilhar em outros sites

cara, eu não costumo usar switch, eu uso mais "while" e "Do While".

Veja um exemplo de uso do "Do While":

 

#include <stdio.h>
#include <stdlib.h>

int main() {
  char nome[13][10] = {"zero", "Janeiro", "Fevereiro", "Marco", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"};
  int mes;

  do {
    printf("\n\ndigite o numero do mes ou 0 para sair: ");
    scanf("%d", &mes);

    if (mes > 0 && mes < 13) //entre 0 e 13, entreeee!!!
      printf("Mes: %s", nome[mes]);
    else if (mes > 12 && mes < 100 )
      printf("Meses muito grandes para existir");
    else if (mes < 0 || mes > 99)
      printf("Voce deve ser retardado, sem chance desse mes existir!!!");

  } while (mes != 0); // enquanto o mes for diferente de "0" continua no while


  return 0;
}

 

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

Eu tinha pensado que dava pra fazer isso também em switch, mas vou seguir o seu exemplo.

 

@CiroboyBR

Ultima duvida, existe uma forma de pegar a fração ( resto ) de um Ponto Flutuante? eu utilizei tudo, mas não obtive sucesso... em meu ultimo teste eu utilizei o Modulo % mas deu erro de compilação.

 

Exemplificando:

  • Em negrito é o que eu quero obter.

1.13 ( Minuto . Segundos ) - Float.

Existe alguma forma de pegar o Resto ( depois do ponto - float ) o valor dele ? quero pegar o 13  do ponto flutuante. 

 

//Minha tentativa, do que eu já sei.

float: Resultado = 1.13;
int Minuto = Exemplo; //fica 1
int Segundo = .... ( como que eu pego o .13 ) ????

Obrigado pela sua ajuda ;)

Link para o comentário
Compartilhar em outros sites

@HardCode por acaso você está tentando converter segundos em minutos, horas ou vice versa?

Você pode utilizar um inteiro pra pegar o valor do float, após isso é só subtrair o inteiro do float que você terá os números decimais.
 

#include<stdio.h>
#include<stdlib.h>

int main() {
  long int inteiro;
  float numero, resto;

  printf("Digite o numero: ");
  scanf("%f", &numero);

  inteiro = numero;

  resto = numero - inteiro;

  printf("\nNumero: %f", numero);
  printf("\nInteiro do Numero: %ld", inteiro);
  printf("\nResto do Numero: %f", resto);
  
  system("pause");

  return 0;
}



 

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

@CiroboyBR

Citar

printf("%s", nome);

Nesse caso essa matriz funciona como um vetor de 13 posições, acessadas de nome[0]...nome[12];

somente imprime o nome[0], não de nome[0] a nome[12], cada nome tem '\0', quando tentar usar a matriz como um vetor somente vai imprimir "zero" e ainda assim mostrando um aviso. Isso que você fala imprime toda a matriz? :o faça um print para eu poder ver, talvez seja algo na configuração do compilador não sei.

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

for(int Repetir = 0; Repetir < 2; Repetir++) 
for(int Continuar = 0; Continuar <= 5; Continuar++)
 {
  do {                                    
   
   switch(Continuar)
   {
   case 0: scanf(" %d",&Dias_[Continuar]); break;
                                      
   case 1: scanf(" %d",&Horas_[Continuar]); break;
                                      
   case 2: scanf(" %d",&Minutos_[Continuar]); break;
                                      
   case 3: scanf(" %d",&Segundos_[Continuar]); break;
                                      
   case 4: scanf(" %c",&Operando_);	
  }	
  printf(">> Estamos no Continuar %d, Retornou: %d",Continuar,Continuar == 1 && Horas_[Continuar] < 0 || Horas_[Continuar] > 60);

  if(Continuar == 0 && Dias_[Continuar] < 0) printf("| ERRO |: Informe um dia valido, superior a ZERO !\a");
                                            
  if(Continuar == 1 && Horas_[Continuar] < 0 || Horas_[Continuar] > 24) printf("| ERRO\a |: Horas validas de 0 a 24 !");
 }
 while(.... ) // aqui não tem problemas, codigo grande, é apenas lá no if.

Boa Noite, eu não entendi muito bem nesta questão, acredito que seria um problema de hierarquia .. mas não é, por curiosidade, por que a função:

 

if(Continuar == 1 && Horas_[Continuar] < 0 || Horas_[Continuar] > 24) está sendo chamada? sendo que está no Continuar 0... eu não entendi em relação, será que meu compilador está bugando? este é o motivo da postagem agora.

 

Digitei: 1

"Estamos no Continuar 0, Retornou 1"

"| ERRO\a |: Horas validas de 0 a 60 !" ( mostrou )

 

Digitei 22

"Estamos no Continuar 0, Retornou 1"

| ERRO\a |: Horas validas de 0 a 60 !

 

Que compilador recomendam? nunca deu problemas no if..

 

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...