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

(Resolvido) Comparação de String


raphaa

Pergunta

Olá, tenho um exercicio para fazer, assim:

7) Leia uma matriz de 10 nomes com tamanho máximo 20 para cada nome e imprima na tela todos os nomes. Em seguida o usuário deverá entrar com um nome e o programa deverá buscar esse nome na matriz, retornando se encontrou o nome e em que posição da matriz ele está.

Eu fiz o seguinte, mas não tá funcionando e não sei ainda bem como trabalhar com comparação de Strings. alguém ajuda? Preciso terminar antes das 19:00, hehehehe

#include <stdio.h>
#include <stdlib.h>

int main(){
    int i;
    char nomes[10][20]={"Raphael","Marina","Luisa","João","Felipe","Bruna","Gustavo","Henrique","Pedro","Gabriel"},check[1][20];

    printf("Lista de nomes armazenados no programa:\n\n");
    for(i=0;i<10;i++){
                      printf("%s\n",nomes[i]);
    }
    
    digitar:
    printf("\nDigite um nome para descobrir sua posição na lista: ");
    scanf("%s",&check[1][20]);
    for(i=0;i<10;i++){
                      if(check[1][20] == nomes[i][20]){
                                   printf("O nome %s foi encontrado no programa. Ele está na posição %d",nomes[i][20],i);
                      } else {
                      printf("\nNão encontramos ninguém com esse nome, tente novamente!\n");
                      goto digitar;
                      }
    }
    system("pause");
}

Editado por raphaa
Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Fiz assim e dá erro:

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

int main(){
    int i;
    char nomes[10][20]={"Raphael","Marina","Luisa","João","Felipe","Bruna","Gustavo","Henrique","Pedro","Gabriel"},check[1][20];

    printf("Lista de nomes armazenados no programa:\n\n");
    for(i=0;i<10;i++){
                      printf("%s\n",nomes[i]);
    }
    
    digitar:
    printf("\nDigite um nome para descobrir sua posição na lista: ");
    scanf("%s",&check[1][20]);
    for(i=0;i<10;i++){
                      if( strcmp(check[1][20], nomes[i][20]) == 0){
                                   printf("O nome %s foi encontrado no programa. Ele está na posição %d",nomes[i][20],i);
                      } else {
                      printf("\nNão encontramos ninguém com esse nome, tente novamente!\n");
                      goto digitar;
                      }
    }
    system("pause");
}

19 C:\DOCUME~1\alunos\CONFIG~1\Temp\ZGTemp\Exercicio 7.cpp invalid conversion from `char' to `const char*'

Link para o comentário
Compartilhar em outros sites

  • 0

Você esta usando um arrray bidimensional do tipo CHAR, na declaração: (char nomes[10][20]) você esta declarando um array de 10 sequencias de 20 characteres... Assim quando você indica nomes[x][x] você esta indicando apenas um caractere... e a função strcpy() tem como parametros duas SEQUENCIAS DE CARACTERES (char*) não apenas um caratere.

para resolver é só indicar nomes em vez de nomes[20] (faça isso para a variavel check tambem)

e outra coisa:

*Não use system("pause"); porque alem de não ser portavel, e se o usuario mudar a funcionalidade do "pause"?

*Não use goto nesses casos, ele favorece a ilegibilidade do código.

existem outras alternativas para ele... da uma procurada no google.

da uma olhada nesse post:

http://www.guiadohardware.net/comunidade/s...st/4087421.html

;)

Link para o comentário
Compartilhar em outros sites

  • 0

Sim, eu usei goto na pressa mesmo, o professor já tinha me dito a mesma coisa... Só que é muito tentador e eu não vejo problema, exceto quando o programa inteiro funciona desta forma e é preciso "pular" de um lado para outro para acompanhar a lógica... :D

Agora deu certo e troquei o goto por do... while e botei um flag. Ty

Link para o comentário
Compartilhar em outros sites

  • 0

Sim, sim... Já esta tudo certo... O codigo inteiro ficou assim:

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

int main(){
    int i,found;
    char nomes[10][20]={"Raphael","Marina","Luisa","Alfredo","Felipe","Bruna","Gustavo","Henrique","Pedro","Gabriel"},check[1][20];

    printf("Lista de nomes armazenados no programa:\n\n");
    for(i=0;i<10;i++){
                      printf("%s\n",nomes[i]);
    }
    

    do{
       printf("\nDigite um nome para descobrir sua posicao na lista: ");
       scanf("%s",&check[1]);
                          for(i=0;i<10;i++){                                                       //Faz o teste em todas as linhas
                                            if( strcmp(check[1], nomes[i]) == 0){                  // Testa se nome digitado esta na lista de nomes
                                                printf("%s foi encontrado na lista. Posicao: %d\n",nomes[i],i+1);
                                                found = 1;                                         // Flag para indicar que o nome foi achado na lista
                                            }
                          }
            if(found != 1){                                                                        // Impede que a frase a seguir apareça mesmo quando o nome estiver na lista.
                     printf("\nNome não encontrado, tente novamente!\n");
            }
    } while (found != 1);                                                                          //Caso não encontre em nenhuma linha, pede ao usuário que digite outro nome. 
    getch();
}

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