Ir ao conteúdo
  • Cadastre-se

C Como faço para imprimir corretamente essa string?


Amanda Kellen

Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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