Ir ao conteúdo

Posts recomendados

Postado

Fiz um programa que transforma letras minusculas em maiusculas,apesar de estar funcionando a impressao da string não está correta,imprimi como a foto em anexo,não imprimindo o espaço,o que faço para corrigir esse erro?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TAMANHO 20

int main()
{
char nome[TAMANHO],troca[TAMANHO];
leitura(nome);
maiuscula(nome,troca);
getchar();
return 0;

}
void leitura(char nome[])
{
int i;
printf("\nDigite um nome(ate 19 caracteres)");
gets(nome);
}
void maiuscula(char nome[],char troca[])
{
int i;
for(i=0;i<TAMANHO;i++)
{
    if ( (nome[i] >= 'a') && (nome[i] <= 'z') )
    {
        troca[i]= nome[i]- 32;
       //nome[i] = nome[i]- 32;//quando eu fiz assim verifiquei que imprimia corretamente a string nome mas a troca sempre fica estranha,mesmo dessa forma dando certo queria
       //verificar como seria o jeito correto ultilizando a string troca,já que essa foi a minha priomeira ideia e não achei o erro
    }

}
printf("\n A string:%s em maiusculo fica:%s \n",nome,troca);

}

 

aaaaaaaaaaaa.jpg

  • Curtir 1
Postado

@Amanda Kellen       um pequeno erro e seu código não funcionava, pois é preciso declarar as funções antes da main, caso você coloque tais funções abaixo da main e na hora de compara os caracteres você esqueceu de comparar se o caractere for um espaço '  ' que nesse caso seria colocado na variável troca esse mesmo espaço em branco, e depois de comparar e passar todas as letras para maiúsculas é preciso informar ao sistema onde é o final da string, e para isso você adiciona no final da string esse caractere nulo '\0' e para saber onde é o final da string você usa a função strlen() , então seu código com algumas modificações ficaria assim :
 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TAMANHO 20
void leitura(nome);
void maiuscula(nome,troca);

int main(){
    char nome[TAMANHO],troca[TAMANHO];
    leitura(nome);
    maiuscula(nome,troca);
    getchar();
    return 0;
}
void leitura(char nome[]){
    int i;
    printf("\nDigite um nome(ate 19 caracteres)");
    gets(nome);
}
void maiuscula(char nome[],char troca[]){
    int i;
    for(i=0;i<TAMANHO;i++){
        if ( (nome[i] >= 'a') && (nome[i] <= 'z') ){
            troca[i]= nome[i]- 32;
            /*//nome[i] = nome[i]- 32;//quando eu fiz assim verifiquei que imprimia corretamente a string nome mas a troca sempre fica estranha,mesmo dessa forma dando certo queria*/
            /*//verificar como seria o jeito correto ultilizando a string troca,já que essa foi a minha priomeira ideia e não achei o erro*/
        }
        else
            troca[i]=nome[i];
    }
    troca[strlen(nome)]='\0';
    printf("\n A string:%s em maiusculo fica:%s \n",nome,troca);
}

 

  • Curtir 1
Postado

@Amanda Kellen uma pequena sugestão, na função leitura você utiliza a função gets, que não para de pegar os caracteres mesmo que estore o buffer da string(que no caso é 19), então eu sugiro que você utilize a função fgets em vez da gets para evitar problemas na sua aplicação.

 

Mesmo que o usuario escreva mais de 19 letras, não vai capturar, só vai capturar até a letra de número 19.

 

fgets(nome, (TAMANHO - 1), stdin);

 

http://rberaldo.com.br/c-por-que-usar-fgets-em-vez-de-gets/

  • Curtir 2
Postado

@cyer muito obrigada pela dica,irei usar:D

adicionado 1 minuto depois

@devair1010 Muito obrigado pela ajuda,só não entedi muito bem essa parte do código:

troca[strlen(nome)]='\0';

sei que o strlen retorna o comprimento da string,no caso nome,mas não entendi o porque do uso nesse código,poderia me explicar por favor?

  • Curtir 1
Postado

@Amanda Kellen     essa variável ( troca ) vai recebendo os caracteres da variável ( nome ) passados para maiúsculo e os caracteres que não são letras do jeito que eles são, e na hora de imprimir, se essa variável ( troca ) não tiver o caractere nulo "\0"  ele imprime os caracteres dessa variável ( troca ) misturados com lixo que está na memória pois ele não sabe onde termina a string, por isso você usa o strlen() para saber onde é o fim da string ( nome ), que é igual a quantidade de caracteres da string,  e coloca o caractere " \0 "  na variável  ( troca )  informando que ali é o final da string ( troca ) , assim ele imprime certo sem nenhum lixo junto .

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!