Dúvida rápida em C

1. Dúvida rápida em C

Rinaldo Adilson da Silva
Fantasmazul

(usa OpenSuSE)

Enviado em 16/02/2008 - 23:18h

Olá pessoal, bem este é meu primeiro post no fórum, gostaria eu que fosse para ajudar alguém e não eu a a ser ajudado, mas tudo bem. Sem mais delongas eu peço que me ajudem com uma dúvida.

Eu gostaria de saber como comparar uma String com um caractere e depois futuramente "limpar" o conteúdo desta string para que possa ser reutilizada. Sou iniciante em programação por isso não se assustem com os erros no código:

CODE
#include <stdio.h>
int main (void)
{char resp[2];
printf ("Você acha o Viva o Linux um site útil ? - Digite S para sim e N para não: ");
scanf ("%c", &resp);
if (resp=='N') //Mesmo digitando N ele não entra no laço
{printf ("\nEntão o que faz aqui, por acaso é retardado? - Digite S para sim e N para não: ");
scanf ("%c", &resp); // Como faço para limpar o conteudo da variável resp?
if (resp=='S')
printf ("Bem que eu desconfiava");
else
printf ("Então se manda daqui");
}
}


  


2. Re: Dúvida rápida em C

Jose Ribeiro
joserribeirojuni

(usa CentOS)

Enviado em 16/02/2008 - 23:23h


Usa a fução


system("clear");

Abraço.


3. Re: Dúvida rápida em C

Fagner Amaral de Souza Candido
f_Candido

(usa Ubuntu)

Enviado em 17/02/2008 - 00:03h

A Linguagem C, tem funções próprias para manipulações de caracteres. Estas por sua vez se encontram na header string.h. Nesta header existem muitas funções que serão úteis. Em relação a limpar o conteúdo de uma variável, no teu caso, pode-se fazer o da seguinte forma:
resp[0] = aspasSimples, contraBarra, zero, aspasSimples(Coloquei desta forma pois a formatação ficou diferente.);

Espero ter ajudado

Abraços


4. Re: Dúvida rápida em C

Jose Ribeiro
joserribeirojuni

(usa CentOS)

Enviado em 17/02/2008 - 00:07h

O cara eusó vi agora me desculpe entendi errado sua pergunta rsrs
Abraço e foi mal...


5. Comparação

Rinaldo Adilson da Silva
fantasmazul

(usa OpenSuSE)

Enviado em 17/02/2008 - 01:14h

Valeu pela ajuda, mas o que eu não estou conseguindo de forma alguma é fazer a comparação entre a variável resp e o caracter digitado para entrar no comando if

http://img516.imageshack.us/my.php?image=stringerrobv9.jpg

usando strcmp

http://img407.imageshack.us/my.php?image=stringerro2ci7.jpg

Quem puder ajudar eu agradeço muito, passei o dia inteiro revirando o Google e não achei nada.


6. Re: Dúvida rápida em C

Fagner Amaral de Souza Candido
f_Candido

(usa Ubuntu)

Enviado em 17/02/2008 - 01:22h

Muito Simples. As funções da header string.h comparam string. Desta forma 'S' não é uma string. e resp é um String. Então esta comparação é equivocada. Caso queira, faça da seguinte forma, não lei a resp como uma string e sim como um único caracter, desta forma você facilita sua vida. Daí sua comparação poderá ser mais eficiente.

Espero ter ajudado,

Abraços


7. Não entendi muito bem

Rinaldo Adilson da Silva
fantasmazul

(usa OpenSuSE)

Enviado em 17/02/2008 - 02:27h

Amigo não entendi muito bem sua dica, sei que se eu deixar a variável resp sem o número entre colchetes, a comparação ocorre, porém o programa vai para o final e não lê mais nada.
http://img407.imageshack.us/my.php?image=stringerro3hm5.jpg

Como assim ler resp como caractere? Poderia me dar um exemplo?


8. Re: Dúvida rápida em C

Geraldo José Ferreira Chagas Júnior
gjr_rj

(usa Debian)

Enviado em 17/02/2008 - 03:42h

Neste caso entenda string = vetor de caracter

O único erro é que você declarou o variável como array de caracter e "string" não se compara assim.

Para comparar "string" você deve usar a função strcomp da string.h
r = strcomp (c1, c2);
if (r)

Mais não acho a melhor forma. Da forma que está o usuário tem que digitar N<ENTER>.
dessa forma a variável resp fica com o valor
resp[0]= 'N' e resp [1] = '\n'

Então, melhor que usar strcomp é comparar a posição 0 do vetor. Como qualquer posição de um vetor de caracter é um caracter, e caracter pode ser comparado com o sinal =, basta fazer o if dessa forma:
if (resp[0] == 'N')

Uma forma melhor ainda é usar getchar e não scanf. getchar lê caracter então o usuário precisará digitar apenas N sem ter que teclar <ENTER>. Como getchar retorna caracter a variável também deverá ser caracter. Então ficará.

char resp;
...
resp=getchar();
if (resp=='N')

Obs.: A variável não precisa ser limpa para ser reutilizada. Pelo menos não no caso mostrado por você.

Obs.2: Seria bom não comparar apenas o 'N' mas também o 'n'. Ex.:
if ((resp == 'N') || (resp == 'n'))

Espero ter ajudado.


9. Re: Dúvida rápida em C

Geraldo José Ferreira Chagas Júnior
gjr_rj

(usa Debian)

Enviado em 17/02/2008 - 03:51h

Relendo as respostas achei que algo não ficou explicado. Não tinha reparado que você já tinha tentado usar a função strcomp e um colega respondeu e você não entendeu.
Se você usar ' para delimitar uma letra, essa letra será tratada como um caracter. Logo se você usar strcomp (resp, 'N') não irá funcionar pois estará comparando um caracter e um array de caracter. Para que o N seja tratado como string você terá que usá-lo entre "
strcomp (resp, "N"). Assim funcionará.


10. Tente compilar isso

Rinaldo Adilson da Silva
fantasmazul

(usa OpenSuSE)

Enviado em 17/02/2008 - 22:10h

#include <stdio.h>
int main (void)
{ char a, b;

printf ("\nDigite o primeiro caractere: ");

a=getchar();

printf ("\nVocê digitou: %c ", a);

printf ("\nDigite o segundo caractere: ");

b=getchar();

printf ("\nVocê digitou: %c \n", b);
}

O programa lê o primeiro caractere e exibe, porém ele não lê qualquer outra entrada referente a char, sem contar que mesmo com o comando getchar eu ainda preciso pressionar enter.

O que eu estou querendo fazer é um pequeno programinha de pesquisa, que use variáveis char para pegar as respostas e fazer comparações, mas não consigo por causa deste erro.

Se alguém puder ajudar eu agradeço.


11. Re: Dúvida rápida em C

Fagner Amaral de Souza Candido
f_Candido

(usa Ubuntu)

Enviado em 17/02/2008 - 22:18h

Só uma dúvida a variável b, está com conteúdo indefinido certo? Você não a usa realmente em seu programa. A sua dificuldade esta sendo em diferenciar um único caracter que na linguagem C, é colocado entre aspas simples(''), e string de caracteres(ou vetor), como preferir. Fica uma dica, use a Tabela ASCII, pois cada letra, número ou qualquer coisa que venha do seu teclado tem uma numeração para este tipo de programa.

Espero ter ajudado,

Abraços



12. Re: Dúvida rápida em C

Fagner Amaral de Souza Candido
f_Candido

(usa Ubuntu)

Enviado em 17/02/2008 - 22:53h

Sim, agora entramos em outro problema. O buffer com sujeira. Para resolver isto, coloque antes de b = getchar(), getchar(). Só isso, com isso digamos que você se livra dessa sujeira que fica no Buffer.

Espero ter ajudado,

Abraços



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts