-
Conteúdo Similar
-
Por joaquim_bezzera
Estou fazendo um trabalho para a faculdade criando uma estrutura de cadastro de uma corrida. Já consegui fazer grande parte mas não consigo resolver esses pontos. Alguém saberia resolver?
-
Por Doloblan
Peguei esse codigo da internet, e estou tentando modificar ele para ficar do jeito que preciso, peguei ele sem funcao e preciso de funcao para cada acao e apos criar a funcao de cadastro apenas para teste nao salva a variavel no arquivo binario.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Contato{
char nome[100];
int telefone;
};
struct Contato *agenda;
FILE *fp;
int cadastra(int n, int cap){
fp = fopen("xxx.dat","a+b");
if(n == cap){
cap *= 2;
agenda = realloc(agenda, sizeof(struct Contato)*cap);
}
printf("Digite o nome: ");
scanf(" %[^\n]", agenda[n].nome);
printf("Digite o telefone: ");
scanf("%d", &agenda[n].telefone);
fwrite(agenda, sizeof(struct Contato), n, fp);
fclose(fp);
return n++;
}
int main(){
int cap;
int n;
int opc;
int i;
struct Contato *agenda;
FILE *fp;
fp = fopen("xxx.dat","rb");
printf("N; %d \n", n);
if(fp==NULL){
n = 0;
cap = 20;
agenda = (struct Contato *)malloc(sizeof(struct Contato)*cap);
}
else{
fread(&n, sizeof(int), 1, fp);
cap = n*2;
agenda = (struct Contato *)malloc(sizeof(struct Contato)*cap);
fread(agenda, sizeof(struct Contato), n, fp);
fclose(fp);
}
do{
printf("*** Menu ***\n");
printf("1) Cadastrar contato.\n");
printf("2) Exibir contatos.\n");
printf("3) Apagar.\n");
printf("4) Sair.\n");
scanf("%d",&opc);
switch(opc){
case 1:
printf("n %d\n", n);
n = cadastra(n, cap);
printf("n %d\n", n);
break;
}
if(opc==2){
for(i=1; i<4; i++){
printf("*** Contato %d ***\n",i+1);
printf("Nome: %s\n",agenda.nome);
printf("Telefone: %d\n",agenda.telefone);
}
printf("N; %d \n", n);
}
else if(opc==3){
char nome[100];
int j;
scanf("%s",&nome);
for(i=0; i<n; i++){
if (strcmp(agenda.nome, nome)==0){
for(j=i+1; j<n; j++){
strcpy(agenda[j-1].nome,agenda[j].nome);
agenda[j-1].telefone=agenda[j].telefone;
}
n--;
i=n;
}
}
}
}while(opc!=4);
if(n>0){
fp = fopen("xxx.dat","wb");
fwrite(&n, sizeof(int), 1, fp);
fwrite(agenda, sizeof(struct Contato), n, fp);
fclose(fp);
}
free(agenda);
return 0;
}
-
Por marciniak
Salve!
Estou tentando escrever em uma string (ponteiro alocado dinamicamente) através de uma função alimentada por um ponteiro
Codigo de exemplo:
#include <stdio.h> #include <stdlib.h> #include <string.h> void teste (char *str) { str = (char*)malloc(sizeof(char)*(strlen("teste"))); strcpy(str, "teste"); printf("%s", str); } int main() { char *str1 = NULL; teste(str1); printf("|%s", str1); return 0; }
A intenção é que a saída seja algo do tipo:
teste|teste porém o resultado é:
teste|(null)
Acredito que por estar enviando como referência o str1 ele deveria ser alterado pela função, e portanto permanecer como o mesmo valor de str (que aponta para ele), porém isso não acontece.
Como deveria proceder para conseguir o resultado desejado?
Agradeço!
-
Por luannsr12
Olá pessoal, parece que o meu Photoshop atualizou aqui, pois apareceu algumas ferramentas que eu não tinha visto, e também sumiu o ponteiro do seletor , alguém pode me ajudar
-