Я пытаюсь записать текст в файл, используя циклы, но когда я делаю его как (ogrenci+i)
, используя i
, а не как (ogrenci+0)
, я получаю некоторые странные числа и текст в текстовом файле.
При таком написании (ogrenci+0)
работает правильно. Что я делаю не так?
Я обращаю внимание на указатель на struct в другой функции.
это вопрос ВОПРОСЫ
Предположим, что вам дана структура ниже
typedef struct StudentMark {
char name[20];
char surname[20];
int midterm;
int final;
}STUDENT_MARK;
1-) Запишите программу, которая содержит
a-) Функция для ввода введенного пользователем имени, фамилии и экзаменационных оценок в динамически распределяемую структуру STUDENT_MARK (ваша функция ДОЛЖНА проверять правильность ввода т. е. введенные метки должны быть между [0..100]).
b-) Функция для записи введенных структур VALID в файл с именем marks_YOUR_STUDENT_ID.txt.
2-) Запись программа, которая содержит
a-) Функция для чтения файла с именем marks_YOUR_STUDENT_ID.txt, который содержит данные структур STUDENT_MARK.
b-) Функция для вычисления среднего значения экзамена каждого студента помечает и записывает результат на экран как
«Среднесрочная оценка ученика ИМЯ ФАМИЛИЯ - СРЕДНЯЯ, окончательная оценка - ФИНАЛЬНАЯ, а его / ее среднее значение - СРЕДНЕЕ» *
void girme (int studentnum){
int i;
studentnum = 2;
STUDENT_MARK *ogrenci;
ogrenci = (STUDENT_MARK*) malloc(studentnum * sizeof(STUDENT_MARK));
if(ogrenci == NULL) { exit(1); }
for(i=0;i<studentnum;i++)
{
printf("Enter the student's name, surname, midterm and final respectively: \n");
scanf("%s %s %d %d",(ogrenci+i)->name, (ogrenci+i)->surname, &(ogrenci+i)->midterm, &(ogrenci+i)->final);
if((ogrenci+i)->midterm > 100 || (ogrenci+i)->midterm < 0 || (ogrenci+i)->final > 100 || (ogrenci+i)->final < 0)
{
printf("midterm or final can not be higher than 100 or lower than 0 \n");
exit(1);
}
}
}
void yazma (int studentnum){
int i;
STUDENT_MARK *ogrenci;
FILE *dosya;
dosya = fopen("marks_190704033.txt","w");
if{ (dosya == NULL)
{
printf("Could not open file");
exit(1);
}
else
{
for(i=0;i<studentnum;i++)
{
fprintf(dosya, "%s %s %d %d", (ogrenci+0)->name, (ogrenci+0)-
>surname, (ogrenci+0)->midterm, (ogrenci+0)->final);
}
}
fclose(dosya);
}
int main()
{
int n =2;
girme(n);
yazma(n);
return 0;
}