Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Bruno Inácio

Exercicio em c

Recommended Posts

Alguém pode me auxiliar em um exercício de C?

 

Faça um programa que contenha um menu com as seguintes opcões:

(a) Ler uma string S1 (tamanho maximo 20 caracteres);

(b) Imprimir o tamanho da string S1;

(c) Comparar a string S1 com uma nova string S2 fornecida pelo usuario e imprimir o  resultado da comparacão; 

(d) Concatenar a string S1 com uma nova string S2 e imprimir na tela o resultado da concatenacão;

(e) Imprimir a string S1 de forma reversa;

(f) Contar quantas vezes um dado caractere aparece na string S1. Esse caractere desse ser informado pelo usuario; ´

(g) Substituir a primeira ocorrencia do caractere C1 da string S1 pelo caractere C2. Os caracteres C1 e C2 serao lidos pelo usuário; 

(h) Verificar se uma string S2 e substring de S1. A string S2 deve ser informada pelo ´ usuario; ´

(i) Retornar uma substring da string S1. Para isso o usuario deve informar a partir de ´ qual posicão deve ser criada a substring e qual  e o tamanho da substring.

 

O meu problema é na letra F, meu codigo executa,porém depois que o usuario digita o carácter, o programa fecha. Eis o código:

 

OBS: op1 = Letra a, op2 = Letra B e assim por diante.

 

char s1[20], s2[20];

 

int op1(){
   printf("Opção 1: \n");
   printf("Entre com a str1:");
   setbuf(stdin, NULL);
   scanf("%s",s1);

}

 

int op2(){
   printf("\nOpção 2: ");
   int tamanho=0;
   tamanho = strlen(s1);
   printf("\nO tamanho da str1 é: %d",tamanho);
}

 

int op3(){
   printf("\n\nOpção 3: \n");
   setbuf(stdin, NULL);
   printf("Entre com a str2: ");
   scanf("%s",s2);

   if (strcmp(s1,s2) == 0) printf("Strings iguais!"); else printf("Strings diferentes!");

}

 

int op4(){
   printf("\n\nOpção 4: \n");
   strcat(s1,s2);
   printf("A concatenação das duas string fica: %s",s1);
}

 

int op5(){
   printf("\n\nOpção 5: \n");
   int i;
   printf("A string reversa é: ");
   for(i=20;i>-1;i--){
   printf("%c",s1);
}


}

int op6(){
   char carac[0];
   int i,vezes_carac=0;

   printf("\n\nOpção 6: \n");
   printf("Informar caracter a ser procurado na string: ");
   scanf("%s",carac[0]);
   for(i=0;i<20;i++){
   if (strcmp(s1,carac[0]) == 0) vezes_carac++;
   }

   printf("O caracter %s foi encontrado %i vezes",carac[0],vezes_carac);

}


int main(){

    op1();
    op2();
    op3();
    op4();
    op5();
    op6();


    return 0;
}

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso aí não é um menu, o programa vai executar todas essas funções uma detrás de outra, prove:
 

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

char s1[20], s2[20];

void op1() {putchar('a');}
void op2() {putchar('b');}
void op3() {putchar('c');}
void op4() {putchar('d');}
void op5() {putchar('e');}
void op6() {putchar('f');}
void op7() {putchar('g');}
void op8() {putchar('h');}
void op9() {putchar('i');}

int main ( void ) {
    char op = 0;

    while(op!='s'){
        printf("Escolha uma opcao:\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n",
        "(a) Ler uma string S1 (tamanho maximo 20 caracteres);",
        "(b) Imprimir o tamanho da string S1;",
        "(c) Comparar a string S1 com uma nova string S2",
        "(d) Concatenar a string S1 com uma nova string S2",
        "(e) Imprimir a string S1 de forma reversa;",
        "(f) Contar quantas vezes um dado caractere aparece na string S1.",
        "(g) Substituir a primeira ocorrencia do caractere C1 da string S1 pelo caractere C2.", 
        "(h) Verificar se uma string S2 e substring de S1.",
        "(i) Retornar uma substring da string S1."
        "(s) SAIR"
        );
        
        scanf("%c%*c", &op);
        system("cls");
        switch(op){
            case 'a':op1();
            break;
            case 'b':op2();
            break;
            case 'c':op3();
            break;
            case 'd':op4();
            break;
            case 'e':op5();
            break;
            case 'f':op6();
            break;
            case 'g':op7();
            break;
            case 'h':op8();
            break;
            case 'i':op9();
            break;
            case 's':op = 's';printf("baybay!");
            break;
            default:
            break;    
        }
        printf("\nAperte uma tecla para continuar!");
        getchar();
        system("cls");
    }
    
    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Eu sei cara, mas eu tava fazendo a lógica de cada item primeiro para depois fazer o menu.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Confuso!, não é apenas para fazer um menu? caso contrario, comentando:

    Ainda bem que não sou seu professor jovem, por que isso aqui é falta de estudo das funções básicas e seus argumentos, mas acontece, segue o erro:
       for(i=0;i<20;i++){
       if (strcmp(s1,carac[0]) == 0) vezes_carac++;
       }

    Você esta usando um comparad.... pera ae que?? carac[0] ???

    Vamos começar do inicio da função:

    char carac[0]; ???

    mds... pera ae se não vamos ter um infarto, continuando:
    scanf("%s",carac[0]); WTF???

    nossa chama o samu, porque.... x|

     

    Ok, brincadeiras a parte, 

    1 Erro - você esta declarando um array de character nulo, sem character, ou seja bug na matrix.

              - o certo seria: char carac;     ou    char carac[1]; 

    2 Erro - você esta utilizando o scanf de maneira errada, pois seu char já foi declarado com erro: char charac[0];

             - o certo seria: scanf("%c",&carac[0]);  ou scanf("%s",carac); só se você usou um vetor de caracteres, senão:

             - o certo seria: scanf("%c",&carac);
    3 Erro - dentro do loop voce está utilizando a função strcmp de maneira incorreta, pois essa função so server para verificar se strings são iguais ou diferentes, para verificar caracteres voce deve utilizar do seguinte modo:

       for(i=0;i<20;i++){
       if (s1[i] == charac[0])  
             vezes_carac++;
       }

      você só usa o charac[0] se você utilizou um vetor de caracteres, caso declarou apenas 'char charac;', use assim:
     

       for(i=0;i<20;i++){
       if (s1[i] == charac)  
             vezes_carac++;
       }

     

    Editado por 1freakday

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

    Direitos autorais

    Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

    ×