My C application doesn’t work and I can’t find the error

Asked

Viewed 45 times

-1

But she doesn’t perform and I can’t find the error, could help me?

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

int main(void){
  int *v,n,i,j,k=0,s[20];

  do{
    printf("\nInforme quantos números de 1 á 20 você irá jogar: ");
    scanf("%d", &n);
    printf("\n");

    if(n<1 || n>20){
      printf("Você deve apostar um número entre 1 e 20");
    }
  }while( n<1|| n>20);

  v = (int*) malloc(sizeof(int)*n);

  if(v == NULL){
    printf("Memória insuficiente");
    exit(1);
  }

  printf("Informe os números da aposta, escolha entre 0 e 100 ");
  scanf("%d", &v[i]);

  if(v[i]<0 || v[i]>100){
    printf("Você deve escolher um número entre 0 e 100\n");
  }while(v[i]<0 || v[i]> 100);
 
  printf("\n Você apostou esses número:");

  for( i = 0; i <n; i++){
  printf("%d \n", v[i]);
 }
    
  
  printf("\n Os números sorteados foram: \n");
  srand(time(NULL));

  for (i = 0; i<20; i++){
    s[i]= rand() % 100 ;
    printf("%d\n", s[i]);
  }

  for(i=0; i<n; i++){
  for (j = 0; j<20; j++){
  if(v[i] == s[j])
  k++;
  }  
  }

  printf("Parabéns! Você acertou %d", k);

  
  return 0;
}
  • I believe that here: if(v[i]<0 || v[i>100]){ should be: if(v[i]<0 || v[i]>100){. Missing a loop in the reading of the bet numbers, you use the variable i that contains memory junk. Note that by drawing the numbers you are allowing repeats to occur eventually.

  • Then edit your question and post the corrected code because we can’t guess how it looked.

1 answer

0


Missing a loop and identifying possible repetitions.
Evaluate with the modifications below:

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

int main(void){
    int *v,n,i,j,k=0,s[20], ac[20];
    do{
        printf("\nInforme quantos números você irá jogar (de 1 a 20): ");
        scanf("%d", &n);
        printf("\n");
        if(n<1 || n>20){
            printf("Você deve apostar uma quantidade entre 1 e 20");
        }
    } while( n<1 || n>20);
    v = (int*) malloc(sizeof(int)*n);
    if(v == NULL){
        printf("Memória insuficiente");
        exit(1);
    }
    for (i=0; i<n; i++) {
        printf("Informe o %dº número da aposta, escolha entre 0 e 100 ", i+1);
        scanf("%d", &v[i]);
        while(v[i]<0 || v[i]> 100) {
            printf("Você deve escolher um número entre 0 e 100\n");
            scanf("%d", &v[i]);
        }
        j = 0;
        while (j < i) {
            if (v[j] == v[i]) {
                printf("Número repetido\n");
                printf("Reinforme o %dº número da aposta, escolha entre 0 e 100 ", i+1);
                scanf("%d", &v[i]);
                j = 0;
            }
            else
                j++;
        }
    }
    printf("\n Você apostou esses números:");
    for( i = 0; i <n; i++){
        printf("%d \n", v[i]);
    }
    printf("\n Os números sorteados foram: \n");
    srand(time(NULL));
    for (i = 0; i<20; i++){
        s[i] = rand() % 101;
        j = 0;
        while (j < i) {
            if (s[j] == s[i]) {
                s[i] = rand() % 101;
                j = 0;
            }
            else
                j++;
        }
        printf("%d\n", s[i]);
    }
    for(i=0; i<n; i++){
        for (j = 0; j<20; j++){
            if(v[i] == s[j]) {
                ac[k] = v[i];
                k++;
            }
        }  
    }
    printf("Parabéns! Você acertou %d\n", k);
    for (i=0; i<k; i++)
        printf("%d\t", ac[i]);
    return 0;
}
  • It worked! Thank you ♥

Browser other questions tagged

You are not signed in. Login or sign up in order to post.