-1
I’m trying to make a code for questions, however he error, I believe it’s time to pass the matrix by reference.
Code to follow:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
//Troca os valores de 2 variaveis
void trocaValor(float *a,float *b){
float aux;
aux = *a;
*a = *b;
*b = aux;
}
//Essa void ? uma confirma??o para o programa ficar na pagina dos resultados e n sair para o menu principal
void prosseguir(){
printf("\n\nDigite qualquer caracter para prosseguir para a proxima atividade");
getch();
system("cls");
}
//verifica o maior e o menor valor de um vetor
void verificarMaiorMenor(float *menor, float *maior, int n, float valor[]){
for(int i=0;i<n;i++){
scanf("%f", &valor[i]);
if(i==0){
*maior = valor[i];
*menor = valor[i];
}
//caso o vetor seja maior q o maior valor antigo, o maior recebe a posi??o atual do vetor
if(valor[i]>*maior){
*maior = valor[i];
}
//caso o vetor seja menor q o menor valor antigo, o menor recebe a posi??o atual do vetor
if(valor[i]<*menor){
*menor = valor[i];
}
system("clear");
}
}
// transforma minutos em horas e minutos
void transfMinHrs(int x, int *minfinal, int *hrs){
*hrs = x / 60;
*minfinal = x % 60;
}
//Descreve qual foi a atividade selecionada no menu principal
void atvds(int i){
printf("Atividade %d\n", i);
printf("De enter para continuar\n");
getch();
system("clear");
}
//atividade 1
void atvd1(){
int k = 1;
atvds(k);
float a, b;
printf("Digite um valor: ");
scanf("%f", &a);
printf("Digite outro valor ae tiu: ");
scanf("%f", &b);
trocaValor(&a, &b);
printf("a = %f\nb = %f", a, b);
prosseguir();
}
//atividade 2
void atvd2(){
int n, k = 2;
atvds(k);
printf("Digite a quantidade de valores a serem digitados: ");
scanf("%d", &n); //l? o tamanho do vetor de valores
float valor[n], menor, maior;
system("clear");
verificarMaiorMenor(&menor, &maior, n, valor);
printf("O maior valor ?: %f\nO menor valor ?: %f", maior, menor);
prosseguir();
}
//atividade 3
void atvd3(){
int k = 3, min /*minutos passados ao longo do dia*/, minfinal, hrs;
atvds(k);
printf("Digite o tempo em minutos: ");
scanf("%d", &min);
transfMinHrs(min, &minfinal, &hrs);
printf("%d horas e %d minutos", hrs, minfinal);
prosseguir();
}
//le os nomes e verifica as condicoes
void lerNome(char *nomes[10][50], int *tamNome[]){
char nome[50];
for(int i=0;i<10; i++){
printf("Digite o %d nome:\n", i);
scanf("%s", &nome);
*tamNome[i] = strlen(nome);
strcpy(*nomes[i], nome);
}
}
//atividade 4
void atvd4(){
char nomes[10][50];
int tamNome[10];
lerNome(&nomes, &tamNome);
}
main(){
int opc;
opc = 10; // declara opc com o valor 10, para entrar no while
while(opc != 0){
// mostra as op??es
printf("1 --> Atividade 1\n");
printf("2 --> Atividade 2\n");
printf("3 --> Atividade 3\n");
printf("4 --> Atividade 4\n");
printf("0 --> Sair\n");
scanf("%d", &opc); //l? o opc
//de acordo com o valor do opc ele mostra uma atividade diferente ou fecha o programa
switch(opc){
case 1:
system("clear");
atvd1();
opc = 10;
break;
case 2:
system("clear");
atvd2();
opc = 10;
break;
case 3:
system("clear");
atvd3();
opc = 10;
break;
case 4:
system("cls");
atvd4();
opc = 10;
break;
case 0:
system("cls");
printf("Obrigado por ver professora <3\n\n");
break;
}
}
}
Error is on line 100:
//le os nomes e verifica as condicoes
void lerNome(char *nomes[10][50], int *tamNome[]){ // O ERRO PODE ESTAR RELACIONADO COM A PASSAGEM DA MATRIZ nomes[][] PARA A FUNÇÃO lerNome
char nome[50];
for(int i=0;i<10; i++){
printf("Digite o %d nome:\n", i);
scanf("%s", &nome);
*tamNome[i] = strlen(nome);
strcpy(*nomes[i], nome);
}
}
//atividade 4
void atvd4(){
char nomes[10][50];
int tamNome[10];
lerNome(&nomes, &tamNome); //--> LINHA 100
}
Thank you I will try, for 2 dimensions is the same logic?
– Ari Sbardelotto
@Arisbardelotto Yes to 2 dimensions is the same logic. If you repair the correction I proposed in my answer is actually about 2 dimensions.
– Isac