Когда я компилирую это в Linux, я получаю сообщение об ошибке:

project9v2.c: In function `main`:
project9v2.c:34:33: error: expected expression before `<=` token
project9v2.c:38:33: error: expected expression before `<=` token
project9v2.c:42:33: error: expected expression before `<=` token
project9v2.c:46:33: error: expected expression before `<=` token

Он сканирует файл a.txt и должен выводить в b.txt. Содержимое a.txt:

97 85 70 84 33 100 283 53 81 69 89 73 65 86 77 556 -1

#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *inFile, *outFile;
    int current;
    int sum = 0, b, i;
    int A=0, B=0, C=0, D=0, F=0;
    int theGrades[100];


    inFile = fopen("a.txt", "r");
    outFile = fopen("b.txt", "w");

    if (inFile != NULL) 
    {
        b = fscanf(inFile, "%d", &current); 
    }

    while(b != -1)
    {
        theGrades[sum] = current;
        sum++;
        b = fscanf(inFile, "%d", &current);
    }

    for(i=0; i<sum; i++)
    {
        if (theGrades[i] <0)
        {
            break;
        }
        else if (theGrades[i] >=90 && <=100)
        {
            A++;
        }
        else if (theGrades[i] >=80 && <=89)
        {
            B++;
        }
        else if (theGrades[i] >=70 && <=79)
        {
            C++;
        }
        else if (theGrades[i] >=60 && <=69)
        {
            D++;
        }
        else  
        {
            F++;
        }
    }
    fprintf(outFile, "The total number of grades is:" , sum);
    fprintf(outFile, "Number of A’s = %d\n" ,A);
    fprintf(outFile, "Number of B’s = %d\n" ,B);
    fprintf(outFile, "Number of C’s = %d\n" ,C);
    fprintf(outFile, "Number of D’s = %d\n" ,D);
    fprintf(outFile, "Number of F’s = %d\n" ,F);

    fclose(inFile);
    fclose(outFile);
    }
0
user3543547 17 Апр 2014 в 08:39

5 ответов

Лучший ответ

Следуя синтаксису c, вы должны изменить его, как показано ниже. :) Оператор сравнения следует использовать между двумя переменными или числами.

    else if (theGrades[i] >=90 && theGrades[i]<=100)
    {
        A++;
    }
    else if (theGrades[i] >=80 && theGrades[i]<=89)
    {
        B++;
    }
    else if (theGrades[i] >=70 && theGrades[i]<=79)
    {
        C++;
    }
    else if (theGrades[i] >=60 && theGrades[i]<=69)
2
Younghyo Kim 17 Апр 2014 в 04:44
if ( theGrades[i] < 0 )
    break;

switch( theGrades[i] / 10 )
{
    case 10: 
    case 9:  ++A; break;
    case 8:  ++B; break;
    case 7:  ++C; break;
    case 6:  ++D; break;
    default: ++F; 
}
2
slavoo 17 Апр 2014 в 05:26

Вам нужно писать такие утверждения

    else if ((theGrades[i] >=90) && (theGrades[i] <=100))

Для удобочитаемости следует добавить дополнительные скобки.

1
KeepCalmAndCarryOn 17 Апр 2014 в 04:42

Вы можете рассмотреть эту логику для своего цикла for ():

for(i=0; i<sum; i++)
{
    if (theGrades[i] > 100)
       break;

    if (theGrades[i] >=90)
    {
        A++;
        continue;
    }

    if (theGrades[i] >=80)
    {
        B++;
        continue;
    }

    if (theGrades[i] >=70)
    {
        C++;
        continue;
    }

    if (theGrades[i] >=60)
    {
        D++;
        continue;
    }
    if (theGrades[i] >= 0)  
    {
        F++;
        continue;
    }

    break;
}
1
Mahonri Moriancumer 17 Апр 2014 в 05:06

Обновить ниже строки

    else if (theGrades[i] >=90 && theGrades[i] <=100)
    {
        A++;
    }
    else if (theGrades[i] >=80 && theGrades[i] <=89)
    {
        B++;
    }
    else if (theGrades[i] >=70 && theGrades[i] <=79)
    {
        C++;
    }
    else if (theGrades[i] >=60 && theGrades[i] <=69)
0
Jeegar Patel 17 Апр 2014 в 04:42