Faute de Segmentation core dumped...?

Je suis en train de le faire:

Écrire un programme qui accepte les trois entrées de l'utilisateur: attribution de la marque, à mi-parcours de la marque, et de l'examen final
marque.

Ces entrées sont de type float et doit avoir des valeurs entre 0 et 100.

Le programme
faut calculer la note finale comme un pourcentage et une lettre de grade.

• Les notes finales sont calculés comme: travaux 20%, à mi-parcours De 30%, examen Final 50%. Lettre de grades
sont calculés comme suit: Une (grade ≥ 80%), B (80 > finale de grade ≥ 70%), C (70 > finale de grade ≥ 60%),
D (60 > finale de grade ≥ 50%), et F (50 > note finale).

La note finale et la lettre de la catégorie sont affichés.

avec le code suivant:

#include <stdio.h>
int checkMark(int);
float getMark();
float computeFinalGrade(float assign, float midterm, float finalExam, float finalGrade);
int computeLetterGrade(float);
int checkMark(int x)
{
while(x<0 || x>100) //While x is a negative number:
{
printf("Invalid entry.Try again:");
scanf("%d",&x);
}
if(x>0 && x<=100)//If x is a positive number:
x=x;
return x;
}
float getMark(void)
{
float mark=0,assignMark=0,midMark=0,examMark=0,finalMark=0;
char letterGrade;
printf("Enter assignment grade:");
scanf("%d",mark);
checkMark(mark);
assignMark=mark;
printf("\nEnter midterm mark:");
scanf("%f",&mark);
checkMark(mark);
midMark=mark;
printf("\nEnter exam mark:");
scanf("%f",&mark);
checkMark(mark);
examMark=mark;
finalMark=computeFinalGrade(assignMark,midMark,examMark,finalMark);
letterGrade=computeLetterGrade(finalMark);
printf("The final grade for the course is %.1f, and the letter grade is %c.\n",finalMark,letterGrade);
return 0;
}
float computeFinalGrade(float assign, float midterm, float finalExam, float finalGrade)
{
assign=(float)0.2*assign;
midterm=(float)0.3*midterm;
finalExam=(float)0.4*finalExam;
finalGrade=(float)assign+midterm+finalExam;
return finalGrade;
}
int computeLetterGrade(float finalGrade)
{
int grade;
if(finalGrade>=80)
grade=65;
if(finalGrade<80)
if(finalGrade>=70)
grade=66;
if(finalGrade<70)
if(finalGrade>=60)
grade=67;
if(finalGrade<60)
if(finalGrade>=50)
grade=68;
if(finalGrade<50)
grade=70;
return grade;
}
int main()
{
getMark();
return 0;
}

Quand je déboguer le programme ci-dessus et entrez un nombre négatif, il me donne ceci:

Enter assignment grade:123
Segmentation fault (core dumped)

Ce que je fais mal exactement?

  • Apprendre à utiliser un débogueur, tels que gnu.org/s/gdb
  • Où ça plante? Charger le fichier de base dans le gdb et faire un peu d'analyse post mortem. Ensuite, lorsque vous savez ce que la ligne, il se bloque sur ce sujet est un peu plus facile.
  • 123 n'est pas un nombre négatif...
  • Je pense que c'est "négative", comme dans le mauvais sens dans ce cas.
  • Il dit: "et entrez un nombre négatif" c'est à dire le nombre < 0 ...
InformationsquelleAutor lakam99 | 2011-11-06