c代码:如果/不会做我要求它做的事情

时间:2015-02-14 07:51:54

标签: c facebook if-statement while-loop

我是c编码的新手,我有这个问题需要解决:

我必须制作一个接收学生笔记并继续学习的代码......

到目前为止,这是我的代码:

#include <stdio.h>
#include <ctype.h>

int main() {

int intra, final,tps, nbNotes=0;
float moyPond, globale;
char reponse; /* réponse de l'usager */
const float POND_INTRA = 0.30;
const float POND_FINAL = 0.40;
const float POND_TPS = 0.30;
const float POND_INTRA_FINAL = 0.70;

do
{
    printf("Entrez vos 3 notes en ordre soit intra, final et tps: ");
    scanf("%d%d%d", &intra, &final, &tps);
    nbNotes++;

    /* calcul de la moyenne de l'intra avec le final */
    moyPond = ((intra * POND_INTRA) + (final * POND_FINAL)) / POND_INTRA_FINAL;

    if (moyPond < 40 && tps > 50)
    {
        tps = 50;
    }
    /* calcul de la note finale */
    globale = (POND_INTRA * intra) + (POND_FINAL * final) + (POND_TPS * tps);

    printf("\nVoulez-vous entrer une autre note? (o/n) \n");
    fflush(stdin);

    reponse = getchar();
    printf("intra    final    tps     moyenne pondérée     globale     littérale\n");

} while (toupper(reponse) == 'O');

printf("%d       %d       %d     %6.2f               %6.2f", intra, final, tps, moyPond, globale);

if (globale >= 90 && globale <= 100)
{
    printf("       A+\n");
}

if (globale >= 85 && globale < 90)
{
    printf("       A\n");
}

if (globale >= 80 && globale < 85)
{
    printf("       A-\n");
}

if (globale >= 77 && globale < 80)
{
    printf("       B+\n");
}

if (globale >= 73 && globale < 77)
{
    printf("       B\n");
}

if (globale >= 70 && globale < 73)
{
    printf("       B-\n");
}

if (globale >= 65 && globale < 70)
{
    printf("       C+\n");
}

if (globale >= 60 && globale < 65)
{
    printf("       C\n");
}

if (globale >= 57 && globale < 60)
{
    printf("       C-\n");
}

if (globale >= 54 && globale < 57)
{
    printf("       D+\n");
}

if (globale >= 50 && globale < 54)
{
    printf("       D\n");
}

if (globale >= 35 && globale < 50)
{
    printf("       E\n");
}

if (globale >= 0 && globale < 35)
{
    printf("       F\n");
}

return 0;

1 个答案:

答案 0 :(得分:3)

fflush上调用stdin是未定义的行为,换句话说,您不应该这样做。以下是C11草案规范的相关引用,重点是

  

概要

#include <stdio.h>
int fflush(FILE *stream);
     

描述
  如果流指向输出流或更新流   最近的操作没有输入,fflush功能   导致该流的任何未写入数据传递到主机   要写入文件的环境; 否则,行为是   未定义

要解决此问题,请替换这些行

fflush(stdin);
response = getchar();

这一行

scanf( " %c", &response );
/*      ^----- the space in front of the %c is important, 
 *             it causes scanf to skip any white space 
 */