В моей программе я возился с ней, она просто спрашивает, сколько тестов написано, а затем возвращает среднее. Однако я немного изменил его, чтобы он спрашивал, правильно ли введены метки.для освобождения памяти цикла в C
Задача 1: Она не позволяет вводить ваши оценки для всех ваших тестов.
Проблема 2. Если метки ошибочны, она начинается, но сохраняет предыдущие входы в ее памяти? Как я могу исправить?
Вот код:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
//int variables for grade
unsigned int counter; //number of grades to be entered next
int grade;
int total;
float average;
// user input
int userInput; // amount of tests
int yesNo;
//amount of test passed
unsigned int pass = 0;
unsigned int fail = 0;
int doCount = 1;
//unsigned int test;
//---------------------------------------------------------------------------------------------------//
//standards for program to abide to
total = 0; //Total amount of test to be set to zero, until while statement
counter = 1; //Loop counter to start from one
//---------------------------------------------------------------------------------------------------//
printf ("Please enter amount of test you've written so far: ");
scanf ("%d", &userInput);
//printf ("%d", userInput);
//---------------------------------------------------------------------------------------------------//
do {
//Body of calculations of program
for(counter = 0; counter <= userInput; ++counter) { //for loop that correlates to userInput for amount of passes and test marks
printf ("Please enter percentage mark: "); //prompt for test mark
scanf("%d", &grade);
total = total + grade;
counter = counter + 1;
if (grade >= 40) { //if statement for pass or fail
pass = pass + 1;
} else {
fail = fail + 1;
}
}//end of for loop
printf ("Are the grades entered correct? (1 = yes, 2 = no): "); // user input for yesNo - are inputs correct
scanf ("%d", &yesNo);
if (yesNo == 2) {
} else {
average = ((float)total/userInput); //Getting average for tests so far
//if statement to clarify if you're passing
if (average < 40) {
printf ("\nYou are below sub minimum!\n");
printf ("Your overall average is: %.2f %\n", average);
printf ("Passed: %d\n", pass);
printf ("Failed: %d", fail);
} else if (average >= 75){
printf ("\nYou have a distinction agregate!\n");
printf ("Your overall average is: %.2f %\n", average);
printf ("Passed: %d\n", pass);
printf ("Failed: %d", fail);
} else {
printf ("\nYour overall average is: %.2f %\n", average);
printf ("Passed: %d\n", pass);
printf ("Failed: %d", fail);
}
doCount = 2;
}
} while (doCount == 1);
average = ((float)total/userInput); //Getting average for tests so far
//---------------------------------------------------------------------------------------------------//
getch();
return 0;
}
Обратите внимание, что ваш цикл 'для (счетчик = 0; счетчик <= UserInput; ++ счетчик)' сомнительна. Обычно вы будете использовать 'for (counter = 0; counter
ваш код не удается скомпилировать. как указано, это заставляет компилятор выводить 7 предупреждений. Настоятельно рекомендуем всегда включать все предупреждения при компиляции. Затем исправьте предупреждения. Среди прочего, прототипа для 'getch()' не является прототипом, который не является переносной системной функцией. предложите вместо этого использовать 'getchar()'. – user3629249
Эта строка: 'if (average <40) {' и this line: '} else if (average> = 75) {' сравнивает float с целым числом. предложите использовать: 'if (average <40.f) {', поэтому он сравнивает float с float. Аналогично '} else if (average> = 75.f) {' – user3629249