Συνάρτηση-Αρχείο-Πίνακας Δομών

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Nananeison
Δημοσιεύσεις: 1
Εγγραφή: 26 Μάιος 2013 21:13

Συνάρτηση-Αρχείο-Πίνακας Δομών

Δημοσίευση από Nananeison » 26 Μάιος 2013 22:12

Γεια σας παιδιά..καταρχην να δηλωσω οτι ειμαι αρχαρια και χρειαζομαι την βοηθεια σας για την επιλυση του προβληματος μου που ειναι το εξής:

εχω ενα αρχειο εισοδου το οποιο εχει την παρακατω μορφη:

XANIA 15.8 14.9 16.2 17.4 18.9 25.3 28.8 31.7 21.4 19.5 17.5 15.1
ATHINA 15.6 13.8 16.9 18.2 19.3 26.7 29.5 33.4 22.5 18.4 17.5 14.2
PΑTRA 13.5 12.3 15.8 17.3 18.2 24.9 28.9 30.1 21.7 17.1 15.8 13.8

Θέλω να κάνω ένα πρόγραμμα το οποίο καλώντας συνάρτηση θα διαβάζει τα ονόματα των πόλεων και τις θερμοκρασίες για τους 12 μήνες και θα το αποθηκεύει σε πίνακα δομών 3 θέσεων που σε κάθε δομή θα καταχωρούνται οι 12 μετρήσεις θερμοκρασιών και το όνομα της κάθε πόλης.

Αυτό που με προβληματίζει είναι το πως θα καταλαβαίνει οτι αυτό που διαβάζει ειναι όνομα πόλης ώστε να το καταχωρήσει ως αλφαριθμητικό και στη συνέχεια οτι ο κάθε float αριθμός είναι και για άλλο μήνα.Δηλαδή η διάκριση μεταξύ των αριθμών.

μέχρι στιγμής δεν έχω καταφέρει πολλά.Ιδού...

#include<stdio.h>
#include<conio.h>
#define N 10

struct eisodos
{
char onoma[20];
float temp[12];
};

void inform(struct eisodos dedomena[N]);


FILE *fin;


void main()
{
struct eisodos dedomena[N];
inform(dedomena);

}

void inform(struct eisodos dedomena[N])
{
int i,j;
char onoma[13];
float temp[12];
fin=fopen("input.txt","r");
for(i=0;i<3;i=i+1)
{
fscanf(fin,"%s",onoma);
for(j=0;j<12;j=j+1)
{
fscanf(fin,"%f",&temp[j]);
}
}

fclose(fin);
}


Ξέρω οτι έχω λάθη..οπότε διορθώστε με αν μπορείτε!!

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

Συνάρτηση-Αρχείο-Πίνακας Δομών

Δημοσίευση από Apostolis_38 » 28 Μάιος 2013 13:22

Κι εγώ λίγο αρχάριος στην C++ οπότε αν κάτι που λέω σου φαίνεται οτι δεν ισχύει ψάξτο λίγο περισσότερο.

Κατ' αρχάς, εφόσον δηλώνεις το structure εδώ:

Κώδικας: Επιλογή όλων

struct eisodos
δεν ξαναδηλώνεις εδώ οτι δημιουργείς structure:

Κώδικας: Επιλογή όλων

void inform&#40;struct eisodos dedomena&#91;N&#93;&#41;;
αλλά:

Κώδικας: Επιλογή όλων

void inform&#40;eisodos dedomena&#91;N&#93;&#41;

Επειτα, δεν γνωρίζω αν η C++ έχει τρόπο να ξεχωρίζει τα δεδομένα που διαβάζει από αρχεία (άλλο το user input) αλλά η λογική λέει οτι δεν μπορεί.
Οπότε το αρχείο θα πρέπει να έχει μια συνοχή στη μορφή του.
Αν η πόλη είναι πάντα στην πρώτη θέση τότε αρκεί να πείς την θέση της στο array.
Μετά απλώς καταχωρείς την πόλη ως char. Πιθανώς με static_cast.
Αν η πόλη είναι μια πρώτη μια τρίτη μία πέμτη, δεν νομίζω να γίνεται δουλειά.

Ο διαχωρισμός μπορεί να γίνει βάζοντας έναν χαρακτήρα, π.χ. το κόμμα (,).
Αν δεν μπορείς να πειράξεις το αρχείο και πρέπει να μείνει στη μορφή που είναι τότε φαντάζομαι οτι μπορεί να γίνει χρησιμοποιώντας την isspace ( http://www.cplusplus.com/reference/cctype/isspace/ )

Εδώ ( http://www.learncpp.com/cpp-tutorial/61-arrays-part-i/ ) θα βρείς να διαβάσεις για τους arrays.
Μάλιστα, σε κάποιο σημείο έχει μια άσκηση παρόμοια με τη δικιά σου.

mariosal
Honorary Member
Δημοσιεύσεις: 1473
Εγγραφή: 09 Νοέμ 2007 23:55

Συνάρτηση-Αρχείο-Πίνακας Δομών

Δημοσίευση από mariosal » 29 Μάιος 2013 12:03

Κώδικας: Επιλογή όλων

#include <cstdio>

struct City &#123;
  char name&#91;20&#93;;
  float temp&#91;12&#93;;
&#125;;

void inform&#40;City *a, FILE *in&#41; &#123;
  int i, j;

  for &#40;i = 0; i < 3; ++i&#41; &#123;
    fscanf&#40;in, "%s", a&#91;i&#93;.name&#41;;
    for &#40;j = 0; j < 12; ++j&#41; &#123;
      fscanf&#40;in, "%f", a&#91;i&#93;.temp + j&#41;;
    &#125;
  &#125;
&#125;

int main&#40;&#41; &#123;
  int i, j;
  FILE *in;
  City a&#91;3&#93;;

  in = fopen&#40;"city.in", "r"&#41;;
  inform&#40;a, in&#41;;

  for &#40;i = 0; i < 3; ++i&#41; &#123;
    printf&#40;"%s", a&#91;i&#93;.name&#41;;
    for &#40;j = 0; j < 12; ++j&#41; &#123;
      printf&#40;" %f", a&#91;i&#93;.temp&#91;j&#93;&#41;;
    &#125;
    printf&#40;"\n"&#41;;
  &#125;

  return 0;
&#125;
http://www.cplusplus.com/reference/cstdio/fscanf/

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης