Justiceira Postado Outubro 9, 2009 Denunciar Share Postado Outubro 9, 2009 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.Tipoprintf("\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?? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Durub Postado Outubro 10, 2009 Denunciar Share Postado Outubro 10, 2009 Leia uma string.Veja se há algum dígito diferente de número, aí você pode escolher ignorar ou pedir para digitar novamente.Caso esteja tudo ok, chame a função atoi para converter a string para int.stdlib.h:int atoi(const char *buf);Abraços. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Justiceira Postado Outubro 13, 2009 Autor Denunciar Share Postado Outubro 13, 2009 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 3struct 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] Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Outubro 13, 2009 Denunciar Share Postado Outubro 13, 2009 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Justiceira Postado Outubro 13, 2009 Autor Denunciar Share Postado Outubro 13, 2009 :wacko: Na verdade o codigo todo é 574 linhas ainda,pensei q tinha diminuido bastante foi mal...Realmente deu certo era ponteiro if(...*pesq)ta OkMas quanto a converter eu converti porem mostra numeros estranhos.Coloqueiitoa (v, pesq,10); depois do for na funçãoMas ainda tah erradoVou tentar mais outras coisas Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Outubro 14, 2009 Denunciar Share Postado Outubro 14, 2009 Onde você chamou essa função ?Aqui no código que você postou não vi nenhuma chamada à função atoi. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Justiceira Postado Outubro 18, 2009 Autor Denunciar Share Postado Outubro 18, 2009 Vlw Jonathan Queiroz e DurubDeu 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] Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Justiceira
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
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.