Страница 1 из 1
вывод
Добавлено: 03 мар 2010, 15:58
Евгений Александрович
вывести на экран тех студентов у которых оченка меньше 4 ?
что у меня не так?
Код: Выделить всё
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#include <stdlib.h>
struct my{
char fio[40];
int numer_zach;
char date[40];
int mark;
}list[20],temp[20];
int n;
struct my list1[10]= { {"Vasya",433},{"zhenya",34},{"bobr",45},{"sasha",342},{"belka",4322},{"sachek",3244},{"bredly",324},{"alex",244},{"kostya",3422},{"knedlik",90}};
struct my list2[10]={ {"masha",433},{"tanya",34},{"ulya",45},{"katya",342},{"polina",4322},{"vika",3244},{"sveta",232},{"olga",23211},{"margarita",434}};
void enter(){
int a,b;
printf(" skol`ko?!\n");
scanf("%i",&n);
for(a=0;a<n;a++){
printf(" enter date:\n");
scanf("%s",&list[20].date);
printf(" enter mark\n");
scanf("%i\n",&list[a].mark);
}
for(a=0;a<n;a++){
if(list[a].mark<4) list[b]=list[a]; }//printf("%s",list[a].fio);
for(int b=0;b<n;b++){
printf("%s",list[b]);}
}
void main(){
enter();
getch();
}
Re: вывод
Добавлено: 03 мар 2010, 16:51
Albor
Евгений Александрович, вы сами читали своё послание? Уважайте пожалуйста форумчан - дайте читаемое сообщение, иначе врядли вам ответят.
Re: вывод
Добавлено: 03 мар 2010, 18:56
Евгений Александрович
Извиняюсь,батарея садилась, на скорую руку набирал, вот моя проблема:
вывести на экран тех студентов ,у которых оченка меньше 4 ?
Re: вывод
Добавлено: 03 мар 2010, 20:31
Romeo
Ошибка здесь:
Код: Выделить всё
for(a=0;a<n;a++){
if(list[a].mark<4) list[b]=list[a]; }//printf("%s",list[a].fio);
Переменная
b не была даже инициализирована.
Re: вывод
Добавлено: 03 мар 2010, 21:13
Евгений Александрович
Исправил ошибки. Добавил динамическую память. Проблема: почему я не могу освободить в конце проги память(frrr(p))
->кидает ошибку. В чем моя ошибка?
Код: Выделить всё
struct my{
char fio[40];
int numer_zach;
char date[40];
int mark;
}temp[40];
int n;
struct my list[10]= { {"Vasya",433},{"zhenya",34},{"bobr",45},{"sasha",342},{"belka",4322},{"sachek",3244},{"bredly",324},{"alex",244},{"kostya",3422},{"knedlik",90}};
void enter(struct my *p){
int a;
printf(" skol`ko?!\n");
scanf("%i",&n);
for(a=0;a<n;a++){
printf(" enter date:\n");
scanf("%s",&p[a].date);
printf(" enter mark\n");
scanf("%i",&p[a].mark);
}
for(a=0;a<n;a++){
if(p[a].mark<4) temp[b]=list[a]; }
for(int b=0;b<n;b++){
printf("%s",temp[b].fio);}
}
void main(){
struct my *p;
p=(struct my*)malloc(n*sizeof(my));
enter(p);
getch();
free(p);/// тут проблема (може ее не тут нужно освобождать?!)
}
Re: вывод
Добавлено: 04 мар 2010, 08:42
Albor
После malloc обязательно нужно проверить возвращённый указатель, не равен ли он NULL. Если не равен,то можно использовать. Я в твоём коде вижу проблему ранее - не инициализирована переменная n, используемая при выделении памяти, там наверняка мусор и malloc возвращает NULL.
Re: вывод
Добавлено: 04 мар 2010, 21:00
Евгений Александрович
Ошибок больше нету, но возникла новая проблема: мне нужно выводить имена всех тех, у кого оченка ниже 4, а оно выводит только текущего (т.е. про вводе к примеру 2 студенто оно выводит второго, а не обоих, хотя я намеренно дил им по 3 бала) ?
Код: Выделить всё
struct my{
char fio[40];
int numer_zach;
char date[40];
int mark;
}temp[40];
int n;
struct my list[10]= { {"Vasya",433},{"zhenya",34},{"bobr",45},{"sasha",342},{"belka",4322},{"sachek",3244},{"bredly",324},{"alex",244},{"kostya",3422},{"knedlik",90}};
void enter(struct my *p){
int a;
printf(" skol`ko?!\n");
scanf("%i",&n);
for(a=0;a<n;a++){
printf(" enter date:\n");
scanf("%s",&p[a].date);
printf(" enter mark\n");
scanf("%i",&p[a].mark);
}
for(a=0;a<n;a++){
if(p[a].mark<4) temp[b]=list[a]; }
for(int b=0;b<n;b++){
printf("%s",temp[b].fio);}
}
void main(){
struct my *p;
p=(struct my*)malloc(50*sizeof(my));
if(p==NULL) exit(1);
enter(p);
getch();
free(p);
}
Re: вывод
Добавлено: 05 мар 2010, 09:02
Albor
не инициализирована переменная n
В этом я ошибся, конечно, так как глобальные переменные инициализируются автоматически, в данном случае значением 0, но это наверняка способствовало получению нулевого указателя.
а оно выводит только текущего
Тебе Romeo уже писал о переменной b. Зачем ты вообще копируешь массив структур, если стоит задача просто вывести инфу по определённому условию? Делай вывод по условию и всё.
Re: вывод
Добавлено: 05 мар 2010, 20:33
Евгений Александрович
Все, дошло, огромное спасибо.
