Целью этой программы является определение минимального количества баллов, необходимых на экзамене для получения определенной оценки. Например. пользователь введет ТЕСТ 5 10 10 ПРОЕКТ 9 10 15, что означает, что тест получил 5/10 и стоит 10% их оценки, а проект 9/10 стоит 15% их оценки.
Я написал эту программу и жестко закодировал информацию, но теперь, когда я прошу пользователя ввести информацию, мне не удается пройти печать внутри цикла for. Кто-нибудь может помочь? Я думаю, что это занимает слишком много времени, когда я оставил программу работать примерно на полчаса, мне удалось заставить ее распечатать «Всего», но не более того.
РЕДАКТИРОВАТЬ: здесь ожидаемый результат. И вот то, что я получаю в данный момент.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define P 50
#define H3 65
#define H2b 70
#define H2a 75
#define H1 80
#define MAX 10
typedef char name_t[MAX];
typedef struct {
name_t name;
double mark;
double outof;
double weight;
double total;
} assesment_t;
int main(int argc, char **argv){
assesment_t Subject[MAX];
/*---------------------------------------------------------------------------*/
printf("\n\nEnter information in this order separated by a space\n");
printf("When all info entered, press enter\n");
printf("(Include exam but enter the Mark bit as 0):\n");
printf("Name Mark OutOf Weight\n\n");
/*---------------------------------------------------------------------------*/
int i, n;
double total = 0;
/*---------------------------------------------------------------------------*/
for(i = 0;(scanf("%s %lf %lf %lf", &Subject[i].name,&Subject[i].mark,&Subject[i].outof,&Subject[i].weight)) == 4;i++) {
if(i == 0) {
printf("Name\tMark\tOut of\tWeight\tTotal");
}
Subject[i].total = ( (Subject[i].mark/Subject[i].outof) * Subject[i].weight );
printf("\n%s\t%2.1lf\t%2.1lf\t%2.2lf\t%2.2lf", Subject[i].name, Subject[i].mark,
Subject[i].outof, Subject[i].weight, Subject[i].total);
}
/*---------------------------------------------------------------------------*/
n = i;
for( i = 0; i <= n; i++) {
total += Subject[i].total;
}
printf("\nTotal: %3.2lf\n\n", total);
/*---------------------------------------------------------------------------*/
double grade, result;
for( grade = 23; grade <= 60; grade++) {
result = (grade / Subject[i-1].outof) * Subject[i-1].weight;
if(total + result > P && (total + result - 1) < P)
printf("minimum of %2.0lf is needed for FAIL\n", grade);
else if(total + result > H3 && (total + result - 1) < H3)
printf("minimum of %2.0lf is needed for P\n", grade);
else if(total + result > H2b && (total + result - 1) < H2b)
printf("minimum of %2.0lf is needed for H3\n", grade);
else if(total + result > H2a && (total + result - 1) < H2a)
printf("minimum of %2.0lf is needed for H2b\n", grade);
else if(total + result > H1 && (total + result - 1) < H1)
printf("minimum of %2.0lf is needed for H2a\n", grade);
else if(total + result > H1 && (total + result - 1) < H1)
printf("minimum of %2.0lf is needed for H1\n", grade);
else
;
}
/*---------------------------------------------------------------------------*/
return 0;
}
for( i = 0; i <= n; i++) {
--›for( i = 0; i < n; i++) {
2)result = (grade / Subject[i-1].outof) * Subject[i-1].weight;
:i
неверное значение. - person BLUEPIXY   schedule 16.11.2014scanf("%s %lf %lf %lf", &Subject[i].name,&Subject[i].mark,&Subject[i].outof,&Subject[i].weight)) == 4
, почему бы не простоi<MAX
- person Gopi   schedule 16.11.2014i=1
? Вы делаете это? - person Gopi   schedule 16.11.2014gcc -Wall -Wextra -g
). Затем используйте отладчик (gdb
), чтобы понять, как и почему программа ведет себя неправильно. - person Basile Starynkevitch   schedule 16.11.2014CTRL+Z
в конце ввода (вместоCTRL+C
). - person BLUEPIXY   schedule 16.11.2014mark==0
как условие завершения цикла. - person BLUEPIXY   schedule 16.11.2014