Zadanie wygląda tak:
Napisz funkcję znajdującą największą z czterech liczb. Liczby przekazywane są jako argument wywołania funkcji w postaci struktury składającej się z czterech pól. Funkcja zwraca wartość największą z tych podanych w argumencie wywołania.
Przygotuj plik tekstowy zawierający w kolejnych linijkach po cztery liczby rzeczywiste. Napisz program, który będzie otwierał plik, wczytywał liczby z kolejnych wierszy pliku oraz dla każdej kolejnej wczytanej czwórki liczb wywoływał napisaną wcześniej funkcję. Zwróconą przez funkcję wartość, tj. największą z czterech liczb zapisanych w wierszu program od razu wyświetla w oknie konsoli.
Liczba wierszy w pliku powinna być dowolna, ale zakładamy, że nie ma wierszy uszkodzonych, tj. dane wejściowe są poprawne.
I to co udało mi się napisać:
#include <stdio.h>
struct liczba{
int a;
int b;
int c;
int d;
};
int najwieksza(struct liczba max);
int main(){
FILE *plik;
int i, naj;
if((plik=fopen("wynik.txt", "r"))==NULL){ //wynik.txt <- w nim siedza czworki liczb
printf("Nie udalo sie wczytc pliku");
return 0;
}
struct liczba max; //zeruje wartosci poczatkowe max
max.a=0;
max.b=0;
max.c=0;
max.d=0;
while(feof(plik)==0){ //pytania 1 i 2
fscanf(plik,"%d", max.a);
fscanf(plik,"%d", max.b);
fscanf(plik,"%d", max.c);
fscanf(plik,"%d", max.d);
naj=najwieksza(max);
printf("Wynik to: %d\n", naj);
}
fclose(plik);
return 0;
}
int najwieksza(struct liczba max){
int maximum;
int i, c=0;
for(i=0;i<4;i++){ //prymitywny sposob na znalezienie maxa
if(max.a+i<max.a+i+1){
c=max.a+i+1;}
}
maximum=c;
return maximum;
}
Pytania:
- while(feof(plik)==0) czy taki warunek ma w ogóle jakiś sens ? chodzi o to że dopóki nie będzie eof to pętla się wykonuje.
- fscanf rozumiem tak, że wczytuje z pliku treść do spacji i kończy działanie czyli 4 fscanfy wczytują mi 1 wiersz (4 liczby)
- gdzie jest jakiś kluczowy błąd bo ten kod nie chce się za cholerę skompilować
Pozdr.