Alguém pode me indicar meu erro? [RESOLVIDO]

1. Alguém pode me indicar meu erro? [RESOLVIDO]

Luís Antônio de Lima Guimarães
luisguima

(usa Outra)

Enviado em 14/05/2015 - 12:09h

Meu código consiste numa espécia de "agenda", onde ponho alguns dados de uns alunos. O poblema é que no momento em que printo os dados armazenados nas strings, ele imprime da seguinte forma:

segue o código e a saída:

#include<stdio.h>

typedef struct Aluno{
char ra[7], nome[100], curso[4], telefone[15], estado[3];

}Aluno;

int main(){
Aluno a[1000];
int i, n, g, j, aux;
char procura[100];

/*scanf("%[^\n]s", procura);*/
scanf("%d", &n);

for (i=0; i<=n; i++){
scanf("%[^,]s", a[i].ra); getchar();
scanf("%[^,]s", a[i].nome); getchar();
scanf("%[^,]s", a[i].curso); getchar();
scanf("%[^,]s", a[i].telefone); getchar();
scanf("%[^\n]s", a[i].estado); getchar();
}

/*g=0;
for(i=1; i<=n && g=0; i++){

}*/

for(i=0; i<=n; i++){
printf("%s, %s, %s, %s, %s", a[i].ra, a[i].nome, a[i].curso, a[i].telefone, a[i].estado);
}







return 0;
}


saída:

1
147090,Luis,010,(19)999992222,SP

147090Luis,Luis,010,(19)999992222,SP
Process returned 0 (0x0) execution time : 64.909 s
Press any key to continue.

obs.: o código comentado é porque eu ainda usarei as variáveis pra uma continuação do programa.


  


2. MELHOR RESPOSTA

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 14/05/2015 - 17:37h

Olá, é por causa que o buffer está sujo já no começo, quando pede o numero de pessoas.

Seria só colocar o getchar() antes do primeiro scanf e resolveria.

Manti o padrão do programa, mas alterei de scanf("[^,]") para scanf("[^\n]") que pega até apertar o enter, e coloquei os printf's para saber onde estou!

NOTA: O que deu errado no codeblocks? Eu testei aqui e deu certo (também utilizo o codeblocks).

Mudando ficou assim:


#include<stdio.h>

typedef struct Aluno {
char ra[7], nome[100], curso[4], telefone[15], estado[3];

} Aluno;

int main() {
int i, n, g, j, aux;
//char procura[100];
printf("Quantos alunos: ");
scanf("%d", &n);
Aluno a[n];
// Limpa o Buffer
getchar();

for (i=0; i<n; i++) {
printf("RA: ");
scanf("%[^\n]s", a[i].ra);
getchar();
printf("Nome: ");
scanf("%[^\n]s", a[i].nome);
getchar();
printf("Curso: ");
scanf("%[^\n]s", a[i].curso);
getchar();
printf("Telefone: ");
scanf("%[^\n]s", a[i].telefone);
getchar();
printf("Estado: ");
scanf("%[^\n]s", a[i].estado);
getchar();
}

for(i=0; i<n; i++) {
printf("Teste: %s, %s, %s, %s, %s\n", a[i].ra, a[i].nome, a[i].curso, a[i].telefone, a[i].estado);
}
return 0;
}



Espero ter ajudado

[]'s

T+

--
Profissão: Ser Rejeitado pelo VOL!


3. Re: Alguém pode me indicar meu erro? [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 14/05/2015 - 12:26h

Amigo, seu código tem vários erros, por exemplo, você aloca 1000 "alunos" e se o usuario digitar apenas 1? Você disperdicou memória.
Quando utilizamos vetores, não utilizamos o x<=n, pois se é alocado 20 posicoes comeca no 0 e termina no 19, isto é, menor que 20.

Fiz umas alterações e espero que tenha agradado.


#include<stdio.h>

typedef struct Aluno {
char ra[7], nome[100], curso[4], telefone[15], estado[3];

} Aluno;

int main(void) {
int i, n, g, j, aux;
char procura[100];

printf("Digite a quantidade de alunos: ");
scanf("%d", &n);
Aluno a[n];

getchar();

for (i=0; i<n; i++) {
printf("Digite o \"RA\" do aluno [%d]: ",i+1);
scanf("%[^\n]s", a[i].ra);getchar();
printf("Digite o \"Nome\" do aluno [%d]: ",i+1);
scanf("%[^\n]s", a[i].nome);getchar();
printf("Digite o \"Curso\" do aluno [%d]: ",i+1);
scanf("%[^\n]s", a[i].curso);getchar();
printf("Digite o \"Telefone\" do aluno [%d]: ",i+1);
scanf("%[^\n]s", a[i].telefone);getchar();
printf("Digite o \"Estado\" do aluno [%d]: ",i+1);
scanf("%[^\n]s", a[i].estado);getchar();

printf("\n\n");
}
printf("Tabela:\n[RA]\t[NOME]\t[CURSO]\t[TEL]\t[ESTADO]\n");
for(i=0; i<n; i++) {
printf("%s\t%s\t%s\t%s\t%s\n", a[i].ra, a[i].nome, a[i].curso, a[i].telefone, a[i].estado);
}
return 0;
}



Se ajudei, marque o tópico como resolvido e clique em melhor resposta.

Espero ter ajudado

[]'s

T+

--
Profissão: Ser Rejeitado pelo VOL!



4. Re: Alguém pode me indicar meu erro? [RESOLVIDO]

Luís Antônio de Lima Guimarães
luisguima

(usa Outra)

Enviado em 14/05/2015 - 13:04h

Então, seu programa não rodou no meu codeblocks.... deu problema!

e enfim, queria manter a estrutura do meu programa, o que não entendo, é porque o nome e ra estão saindo juntos na primeira parte antes da vírgula, entende?

mas a parte de desperdiçar memória eu concordo, vou colocar Aluno[n];

Thihup escreveu:

Amigo, seu código tem vários erros, por exemplo, você aloca 1000 "alunos" e se o usuario digitar apenas 1? Você disperdicou memória.
Quando utilizamos vetores, não utilizamos o x<=n, pois se é alocado 20 posicoes comeca no 0 e termina no 19, isto é, menor que 20.

Fiz umas alterações e espero que tenha agradado.


#include<stdio.h>

typedef struct Aluno {
char ra[7], nome[100], curso[4], telefone[15], estado[3];

} Aluno;

int main() {
int i, n, g, j, aux;
char procura[100];

printf("Digite a quantidade de alunos: ");
scanf("%d", &n);
Aluno a[n];

getchar();

for (i=0; i<n; i++) {
printf("Digite o \"RA\" do aluno [%d]: ",i+1);
scanf("%[^\n]s", a[i].ra);getchar();
printf("Digite o \"Nome\" do aluno [%d]: ",i+1);
scanf("%[^\n]s", a[i].nome);getchar();
printf("Digite o \"Curso\" do aluno [%d]: ",i+1);
scanf("%[^\n]s", a[i].curso);getchar();
printf("Digite o \"Telefone\" do aluno [%d]: ",i+1);
scanf("%[^\n]s", a[i].telefone);getchar();
printf("Digite o \"Estado\" do aluno [%d]: ",i+1);
scanf("%[^\n]s", a[i].estado);getchar();

printf("\n\n");
}
printf("Tabela:\n[RA]\t[NOME]\t[CURSO]\t[TEL]\t[ESTADO]\n");
for(i=0; i<n; i++) {
printf("%s\t%s\t%s\t%s\t%s\n", a[i].ra, a[i].nome, a[i].curso, a[i].telefone, a[i].estado);
}
return 0;
}



Se ajudei, marque o tópico como resolvido e clique em melhor resposta.

Espero ter ajudado

[]'s

T+

--
Profissão: Ser Rejeitado pelo VOL!







5. Re: Alguém pode me indicar meu erro? [RESOLVIDO]

Luís Antônio de Lima Guimarães
luisguima

(usa Outra)

Enviado em 14/05/2015 - 22:57h

Acho que ajudou! ainda tenho uma segunda parte disso, que estou meio que em dúvida. mas como posto que esse tópico está resolvido?


6. Re: Alguém pode me indicar meu erro? [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 14/05/2015 - 22:59h

Amigo, vá no seu primeiro post, clique em "Resolvido" e depois vá em "Melhor resposta"

Espero ter ajudado

[]'s

T+

--
Profissão: Ser Rejeitado pelo VOL!







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts