Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Comparar uma String com int ?


Justiceira

Pergunta

Como faço para comparar uma String c/ int ou vice-versa em C?

Exemplo:

Queria trabalhar só com int e se o cara digitar uma String o programa recusa.

Tipo

printf("\tErro!\n\tDigite um Codigo Valido!\n");

Já que estaria coletando Codigo(inteiro) porém se a pessoa digita letra mostra numeros tipo isso(2088809675)ou seja Erro!

alguém Pode me ajudar??

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Eu fiz desse jeito e esta rodando por parte,porque ele não pega string so numero(E era o que eu queria),porem esta sempre mostrando codigo não encontrado! mesmo eu tendo preenchido com o codigo ...O que faço??

#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#define MAX 3

struct registro {
int codlivro;
char nomelivro[30];
float preço;
int quant;
};
struct registro tabela[MAX];


int is_numeric(const char *pesq){
int res = 1;
while(*pesq){
if(!isdigit(*pesq)){
res = 0;
break;
}
pesq++;
}
return res;
}

int preenche_tabela()
{
int i;
char strnum[30];

for(i=0;i<MAX;i++){
printf("\t Registro %d \n\n",i);
printf("\tCodigo do Livro : ");
gets( strnum);
tabela[i].codlivro = atoi( strnum);

printf("\tNome do Livro : ");
gets(tabela[i].nomelivro);

printf("\tPreco : ");
gets( strnum);
tabela[i].preço = atof( strnum);

printf("\tQuantidade : ");
gets( strnum);
tabela[i].quant = atoi( strnum);
}
}

int exibe_um(int ind)
{
int i = 0;

i = ind;
printf("\t Registro %d \n\n",i);
printf("\tCodigo do Livro : %d\n",tabela[i].codlivro);
printf("\tNome do Livro : %s\n",tabela[i].nomelivro);
printf("\tPreco : %.2f\n",tabela[i].preço);
printf("\tQuantidade: %d\n\n",tabela[i].quant);
return(ind);
}

char pesq_codliv(char pesq[])
{
int i;

for(i=0;i<MAX;i++)
if(tabela[i].codlivro == pesq)
return(i);

return(-1);
}


main ()
{
int i=0,argc;
char esc=0,*argv[MAX],pesq[MAX];

while((esc != 'S') && (esc != 's'))
{
printf(" MENU \n");
printf("\tA ) Prencher a Tabela.\n");
printf("\tB ) Pesquisar um Livro por Codigo do Livro.\n");
printf("\tS ) Para Sair.\n\n");
printf("\tDigite sua Opcao:\n");
esc = getche();
system("cls");
switch(esc)
{
case 'S':
case 's':{
exit(1);
}
case 'A':
case 'a':{
preenche_tabela();
break;
}
case 'B':
case 'b':{
printf("\tEscolha um Codigo para Pesquisa:\n");
printf("\t");
gets(pesq);
/*while(!is_numeric(pesq)){
printf("\n\tCodigo : %s Invalido!\n\tInforme um codigo Valido\n",pesq);
printf("\t");
getch();
system("cls");
printf("\tEscolha um Codigo para Pesquisa:\n");
printf("\t");
gets(pesq);
} */
if(pesq_codliv(pesq)==-1)
printf("\tO Codigo : %s não foi Encontrado !\n\n",pesq);
else
exibe_um(pesq_codliv(pesq));

printf("\n");
printf("\tPressione uma tecla para retornar ao menu principal...\n");
getch();
break;
}
default:
{
printf("\tOpcao Invalida\n");
exit(1);
break;
}
system("pause");
}
}
}[/codebox]

Link para o comentário
Compartilhar em outros sites

  • 0

Primeiramente, peço que evite a postagem de códigos longos sem necessidade. Isso atrapalha a análise do mesmo.

De qualquer forma, tudo o que você fez foi receber uma string pela função gets, converter para inteiro e colocar numa variável. Você não fez nenhuma verificação antes de gravar o valor. O correto seria você salvar numa string e percorrer seus caracteres e verificar se o valor de cada um está entre 48 e 57 (ver tabela ASCII)

Também obtive alguns erros ao compilar o código, em especial nessa linha:

if(tabela[i].codlivro == pesq)
Não analisei o código, mas o compilador disse que a variável pesq é um ponteiro. Portanto, o código correto seria esse aqui:
if(tabela[i].codlivro == *pesq)

Como disse, não analisei o código, mas se quiser comparar strings com números terá que converter algum dos dois.

Link para o comentário
Compartilhar em outros sites

  • 0

:wacko: Na verdade o codigo todo é 574 linhas ainda,pensei q tinha diminuido bastante foi mal...

Realmente deu certo era ponteiro if(...*pesq)

ta Ok

Mas quanto a converter eu converti porem mostra numeros estranhos.Coloquei

itoa (v, pesq,10); depois do for na função

Mas ainda tah errado

Vou tentar mais outras coisas

Link para o comentário
Compartilhar em outros sites

  • 0

Vlw Jonathan Queiroz e Durub

Deu certo!!

               pesq="/0";
printf("\tEscolha um Codigo para Pesquisa:\n");
printf("\t");
gets(str);
if(((str[0]>='0')&&(str[0]<='9'))||((str[1]>='0')
&&(str[1]<='9'))||((str[2]>='0')&&(str[2]<='9'))
||((str[3]>='0')&&(str[3]<='9'))||((str[4]>='0')
&&(str[4]<='9')))
{
pesq = atoi(str);
if(pesq_codliv(pesq)==-1)
printf("\tO Codigo não foi Encontrado\n\n",pesq);
else
exibe_um(pesq_codliv(pesq));
}
else
printf("Erro Digite um Codigo Valido");
[/codebox]

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...