2010-12-28 6 views
1

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

Написать программа, запрашивающая несколько учеников 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).

Мой текстовый файл имеет такую ​​форму: Bart ------ 04,50 Лиза ------ 18,00 Homer ----- 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]; 
} 

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

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

ответ

1

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

3

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

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

1

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

 Смежные вопросы

  • Нет связанных вопросов^_^