Как прочитать файл, подобрать данные и рассчитать - PullRequest
1 голос
/ 28 декабря 2010

Я читаю книгу, и я не могу понять это, попробуйте: (она написана не на английском языке, поэтому я перевела ее)

Напишите программу, которая запрашивает количество студентовn, выберите n студентов (в динамическом режиме), имя - 10 символов, примечание - 5 символов

Создайте текстовый файл note.txt из представленного выше выбора и добавьте дефисы, чтобы получить 10 символов (для имен).

Затем прочитайте файл и из него (только) вычислите итог.Затем отобразите имя и примечание тех, чья заметка не превышает 10.

Вы должны реализовать 3 функции: createStudent, createFile и readFile и не использовать глобальные переменные.

синтаксис: имя должно быть объявлено как char nom [10 + 1] (то есть Джеймс, а затем будет добавлено 5 дефисов, чтобы получить 10 символов) => james ----- и примечание: char [5 + 1] (то есть 15.00или 07.50)

Советы: Чтобы преобразовать заметку из текстового формата в плавающее, вы можете использовать функцию atof

Я создал функции createStudent и createFile.они работают хорошо, но я не могу понять последнюю часть (функция readFile).

Мой текстовый файл имеет такую ​​форму: Барт ------ 04.50 Лиза ------ 18.00 Гомер----- 03.00

void readFile(int n){
FILE* file = NULL;
double temp= 0.0, average= 0.0;
double *total = (double*)malloc(n*sizeof(double));

int position = 0;
char information[5+1]="";

file = fopen("c:\\myFile.txt","r");
fseek(file,10,SEEK_SET);
while(fgetc(file) != EOF)
{
    fscanf(file,"%5s",&information);
    temp = atof(information);
    total[position]= temp;

    position++;

    fflush(stdin);
    fseek(file,11,SEEK_CUR);
}
fclose(file);
for(int compteur=0;compteur<2;compteur++)
{
    moyenne += totalNote[compteur];
}

Он компилируется, но не работает, и я не могу понять, почему :( У меня такое чувство, что язык C такая боль в заднице по сравнению с java или c #

Не могли бы вы дать мне немного света?

Ответы [ 3 ]

3 голосов
/ 28 декабря 2010

Похоже, ваш входной файл содержит строки вида "".Если в строке всегда есть фиксированное количество строк / чисел, вы можете просто использовать fscanf (например, fscanf(file, "%*s %f %*s %f %*s %f", &number1, &number2, &number3);).

Если, с другой стороны, вы можете иметь произвольное количество строк / чиселпар на строку, вы должны взглянуть на функцию strtok.

1 голос
/ 28 декабря 2010

Используйте fscanf или комбинацию fgets, strtok, atol (или sscanf), чтобы прочитать число.

1 голос
/ 28 декабря 2010

Вы хотите использовать strtok_r (или strtok, если strtok_r недоступен). Затем вы можете преобразовать вашу строку в массив токенов с пробелом. Тогда это должно быть тривиальным циклом через массив для преобразования и суммирования сумм.

...