Qual é o erro? [RESOLVIDO]

1. Qual é o erro? [RESOLVIDO]

ian cléver sales fernandes
ianclever

(usa Arch Linux)

Enviado em 08/03/2013 - 14:38h

#include <stdio.h>
#include <string.h>
#include <strings.h>

main()
{
char nome[100],nome1;
printf("Digite um nome e eu lhe digo quantas letras 'a' tem nele:\n");
gets(nome);
int i=0;
int cont;
int y;
for(cont=0;cont<=100;cont++)
{
nome1=nome[i,i++];
y=strcmp(nome1,"a");
printf("%d",y);
}
}


sou novo no c e estou quebrando a cabeça aqui com a função strcmp estou tendo erro com ela, mas pelo que já li e reli a sintaxe está correta, o problema também não é na variável nome1 ou nome, porque eu já dei printf nas duas e estão saindo o valor como esperado; isso esta me atrapalhando prosseguir com o código.

o que estou tentando fazer é ler um nome no teclado, comparar e imprimir quantas letras a ou A tem no nome.


  


2. MELHOR RESPOSTA

Uilian Ries
uilianries

(usa Linux Mint)

Enviado em 08/03/2013 - 15:56h



main()
{
char nome[100]
int cont;
int length;
int repeticao = 0;

printf("Digite um nome e eu lhe digo quantas letras 'a' tem nele:\n");
gets(nome);
length = strlen(nome);

for( cont = 0; cont < length; cont++ )
{
if( nome[cont] == 'a' )
repeticao++;
}

printf("Numero de repecicoes: %d\n", repeticao);
}



Quais ponto eu alterei:

A função strcmp serve para comparar duas string, quando iguais, retorna 0.
Você estava comparando nome[](uma string) com nome1(apenas um char), isso não estava correto. Para poder comparar teria que passar a referencia do nome1, assim:
strcmp( nome, &nome1 );

Outro ponto, no for você utilizou cont com contagem até até 100, cuidado com isso. i, que está acessando o indice do vetor irá valer 100 no último incremento, e irá acessar nome[100], esse indice é inválido e irá ocorrer uma exceção no código.
Ainda sobre o for, você está usando até o último indice, mas o nome capturado e armazena na variavel nome, pode não conter 100 caracteres, logo o for fica lendo vários indices vazios e desncessários.
O que eu fiz, foi passar o strlen (tamanho do nome) para variável length.



3. Re: Qual é o erro? [RESOLVIDO]

ian cléver sales fernandes
ianclever

(usa Arch Linux)

Enviado em 08/03/2013 - 16:22h

uilianries escreveu:



main()
{
char nome[100]
int cont;
int length;
int repeticao = 0;

printf("Digite um nome e eu lhe digo quantas letras 'a' tem nele:\n");
gets(nome);
length = strlen(nome);

for( cont = 0; cont < length; cont++ )
{
if( nome[cont] == 'a' )
repeticao++;
}

printf("Numero de repecicoes: %d\n", repeticao);
}



Quais ponto eu alterei:

A função strcmp serve para comparar duas string, quando iguais, retorna 0.
Você estava comparando nome[](uma string) com nome1(apenas um char), isso não estava correto. Para poder comparar teria que passar a referencia do nome1, assim:
strcmp( nome, &nome1 );

Outro ponto, no for você utilizou cont com contagem até até 100, cuidado com isso. i, que está acessando o indice do vetor irá valer 100 no último incremento, e irá acessar nome[100], esse indice é inválido e irá ocorrer uma exceção no código.
Ainda sobre o for, você está usando até o último indice, mas o nome capturado e armazena na variavel nome, pode não conter 100 caracteres, logo o for fica lendo vários indices vazios e desncessários.
O que eu fiz, foi passar o strlen (tamanho do nome) para variável length.



valeu pela ajuda mesmo! dei uma modificada, e funcionou, eu tinha pensado em fazer algo desse tipo mas não sabia como fazer a comparação com char eu já tinha ate usado '', mas não sabia que tinha que dar o espaço, e por isso tava tentando com o strcmp, para atribuir valor a um char tem que dar o espaço também?




4. Re: Qual é o erro? [RESOLVIDO]

Uilian Ries
uilianries

(usa Linux Mint)

Enviado em 08/03/2013 - 16:28h

Desculpe, não entendi a colocação, onde seria o "espaço"?


5. Re: Qual é o erro? [RESOLVIDO]

ian cléver sales fernandes
ianclever

(usa Arch Linux)

Enviado em 08/03/2013 - 16:28h

de acordo como que você me mostrou deixei o meu assim:

#include <stdio.h>
#include <string.h>
#include <strings.h>

main()
{
char nome[100];
int num;
int cont;
int cont1=0;
int cont2=0;
printf("Digite um nome e eu lhe digo quantas letras 'a' tem nele:\n");
gets(nome);
num=strlen(nome);
for(cont=0;cont<=num;cont++)
{
if(nome[cont] == 'a')
{
cont1++;
}
if(nome[cont] == 'A')
{
cont2++;
}

}
printf("\nvoce digitou %d 'a' e %d 'A' ",cont1 ,cont2);
}

mais uma vez obrigado.


6. Re: Qual é o erro? [RESOLVIDO]

ian cléver sales fernandes
ianclever

(usa Arch Linux)

Enviado em 08/03/2013 - 16:34h

uilianries escreveu:

Desculpe, não entendi a colocação, onde seria o "espaço"?


para comparar inteiro ou real no if a usa-se:

 if(variável==1){
}// o 1 é só um exemplo.


agora no char pelo que vi tem que fazer assim:

 if(variável_char == 'texto qualquer'){
}


a mesma regra segue para atribuir valor a um inteiro ou real:

 variavel=1;  


então eu queria saber se para atribuir valor no char tem que fazer assim:

 variavel_char = 'texto qualquer';  



7. Re: Qual é o erro? [RESOLVIDO]

Uilian Ries
uilianries

(usa Linux Mint)

Enviado em 08/03/2013 - 16:48h

O espaço é só por questão de identação, não tem problema deixa com ou sem, o compilador deve interpretar isto :)

Ou ponto,

você está testando:

if ( nome[cont] == 'a' )
.
.
.
if ( nom[cont] == 'A' )


Evite isso.
Está forçando o teste duas vezes sempre.
Se caso nome[cont] for igual a 'a', logo ele não pode ser 'A', então vai estar testando sem necessidade.

você pode usar:

if ( nome[cont] == 'a' )
.
.
.
else if ( nom[cont] == 'A' )

Isso exclui a tentativa de testar mesmo em caso positivo na primeira tentativa :)

Bom estudo


8. Re: Qual é o erro? [RESOLVIDO]

Uilian Ries
uilianries

(usa Linux Mint)

Enviado em 08/03/2013 - 16:57h

Cuidado com o contador:


for ( cont = 0 ; cont <= num ; cont++ )


Você está utilizando <=, ou seja, está incluindo o valor de num para cont.
Você apenas ir até cont < num, por quê?
Bom, digamos que nome seja "joao", faria:

|0|1|2|3|4|5|
|j|o|a|o|0|0|

O length de joao é 4, e portanto quando está usando <=, está dizendo cont será de 0 até 4. Veja que o indice 4 já não é mais válido, por isso deve apenas acessar < num.
A mágica é lembrar sempre que começa pelo indice zero.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts