giannis-21 Δημοσιεύτηκε Απρίλιος 5, 2009 #1 Κοινοποίηση Δημοσιεύτηκε Απρίλιος 5, 2009 παιδες εχω αναιβασει μια ασκηση καιο θελω βοηθεια.. οριστε ενας κοδικας που εχω κανει μεχρι τωρα :#include <stdio.h>#include <string.h>#include <ctype.h>int main(){ int i,j,arithmos=-1,stixia[512],counter=0,array[26];//dilosi metabliton char xaraktiras,keimeno[512];//dilosi metabliton FILE *fp; /* orizoume enan FILE pointer */ printf("ginete i anagnosi tou arxeiou.\n"); fp=fopen("data.txt", "w"); /*anoigei to arxeio gia anagnosi */ if(fp==NULL) {//tsekarei an iparxei to arxeio printf("Error: can't open file.\n"); /* fclose(fp); DON'T PASS A NULL POINTER TO fclose !! */ return 1; } else { while(!feof(fp))//i feof dinei 1 otan ftasei sto telos tou arxeiou. { xaraktiras=fgetc(fp);//diabazei enan enan xaraktira apo to arxeio arithmos++;//auksanei o metritis kata ena gia na deiw posoi einai oi xaraktires se plithos } fseek(fp,0,0);//pigainei ton kersora se sigkekrimeno simio.to proto 0 einai i arxi(1 gia to telos).kai to deutero poses theseis meta tin arxi i telos antistixa printf("%d\n",arithmos); for(i=0;i<26;i++){ array=0;//arxikopoioume ton pinaka me midenika stoixeia giati mporei na exei oti nanai mesa. }for ( i = 0; i < 512 && fscanf(fp, "%c", &keimeno) == 1; i++ )//antegrafoume ta periexomena tou arxeio ston pinaka keimeno printf("%c",keimeno); //printf("%c",keimeno); }fclose(fp);return 0; }θελω λιγη βοηθεια στο οτι δεν μου εμφανιζει το περιεχομενο του πινακα κειμενο αν το αρχειο εμσα περιεχει κενα. επειτα στην εγραφη σε ενα αρχειο υπαρχει η εντολη fprintf.αυτη περνει ορισμα πινακα που θα εχει γραχει ο χρηστης η μονο αυτο που θα βαλουμε πχ εμεισ απο την αρχη? η μορφοποιηση θα γινει με την εντολη fseek? και για την αναζητη δεν εχω κατι στο μυαλο μοθ..ευχαριστω θερμα οσους θα κανουν τον κοπο να με βοηθησουν!http___eclass2.ucg.gr_modules_document_document.php_action=view&id=_exercise4.pdf Link to comment Share on other sites More sharing options...
darien Απρίλιος 5, 2009 #2 Κοινοποίηση Απρίλιος 5, 2009 Με μια γρήγορη ματιά:fp=fopen("data.txt", "w"); /*anoigei to arxeio gia anagnosi */Αφού είναι για ανάγνωση, γιατί έβαλες "w" ; "r" δεν θέλει;for ( i = 0; i < 512 && fscanf(fp, "%c", &keimeno) == 1; i++ )//antegrafoume ta periexomena tou arxeio ston pinaka keimeno Αυτό είναι σωστό προγραμματιστικά; Πρώτη φορά βλέπω τέτοια σύνταξη. Link to comment Share on other sites More sharing options...
giannis-21 Απρίλιος 5, 2009 Author #3 Κοινοποίηση Απρίλιος 5, 2009 σωστο ειναι αφου δουλευει οσο για το w κατα λαθος.. a+ αποτι ειδα ειναι για ολες τις δουλειες.. Link to comment Share on other sites More sharing options...
psalias Απρίλιος 5, 2009 #4 Κοινοποίηση Απρίλιος 5, 2009 #include <stdio.h>#include <string.h>#include <ctype.h>int main(){ int i,j,arithmos=-1,stixia[512],counter=0,array[26];[COLOR=Green]//dilosi metabliton[/COLOR] char xaraktiras,keimeno[512];[COLOR=Green]//dilosi metabliton[/COLOR] FILE *fp; [COLOR=Green]/* orizoume enan FILE pointer */[/COLOR] printf("ginete i anagnosi tou arxeiou.\n"); fp=fopen("data.txt", "w"); [COLOR=Green]/*anoigei to arxeio gia anagnosi */[/COLOR] if(fp==NULL)[COLOR=Green]//tsekarei an iparxei to arxeio[/COLOR] { printf("Error: can't open file.\n"); [COLOR=Green]/* fclose(fp); DON'T PASS A NULL POINTER TO fclose !! */[/COLOR] return 1; } else { while(!feof(fp))[COLOR=Green]//i feof dinei 1 otan ftasei sto telos tou arxeiou.[/COLOR] { xaraktiras=fgetc(fp);[COLOR=Green]//diabazei enan enan xaraktira apo to arxeio[/COLOR] arithmos++;[COLOR=Green]//auksanei o metritis kata ena gia na deiw posoi einai oi xaraktires se plithos[/COLOR] } fseek(fp,0,0);[COLOR=Green]//pigainei ton kersora se sigkekrimeno simio.to proto 0 einai i arxi(1 gia to telos).kai to deutero poses theseis meta tin arxi i telos antistixa[/COLOR] printf("%d\n",arithmos); for(i=0;i<26;i++) { array[i]=0;[COLOR=Green]//arxikopoioume ton pinaka me midenika stoixeia giati mporei na exei oti nanai mesa.[/COLOR] } for ( i = 0; i < 512 && fscanf(fp, "%c", &keimeno[i]) == 1; i++ )[COLOR=Green]//antegrafoume ta periexomena tou arxeio ston pinaka keimeno[/COLOR] printf("%c",keimeno[i]); } fclose(fp); return 0;} Πρώτο και βασικό για να βρείς το λάθος σου είναι να γραφεις προγράμματα τα οποια μπορείς να διαβάσεις...απορώ πως μπορείς σε ένα τόσο κακογραμμένο πρόγραμμα να κάθεσαι και να ψάχνεις λάθος...Δεν έκατσα να διαβάσω τον κώδικα σου αλλα στο πρόβλημα σου νομίζω πως η gets σε βολεύειφιλικά πάντα Link to comment Share on other sites More sharing options...
kallileo Απρίλιος 6, 2009 #5 Κοινοποίηση Απρίλιος 6, 2009 Ποια ειναι η δομη του αρχειου κειμενου που διαβαζεις?Δηλαδη πως διαχωριζονται οι χαρακτηρες μεσα στο αρχειο π.χ κενο ή κατι αλλο. Ποσους χαρακτηρες ανα γραμμη έχεις? Link to comment Share on other sites More sharing options...
giannis-21 Απρίλιος 6, 2009 Author #6 Κοινοποίηση Απρίλιος 6, 2009 χωριζονται με κενο. η γραμμη εχει 80 μαξ. εχω την εκφωνιση στο αρχικο ποστ αν θελεις να την δεις αναλυτικα. Link to comment Share on other sites More sharing options...
kallileo Απρίλιος 7, 2009 #7 Κοινοποίηση Απρίλιος 7, 2009 To προγραμμα είναι μεγάλο σε γενικές γραμμές αλλά όχι πολύ δύσκολο...Σου γράψω τι περιπου θα έκανα εγώ για το πρώτο από τα 5 μέρη του προγράμματος και το μενού.Eδώ θα βρεις ότι θες απο C/C++ http://www.cplusplus.com/ και έχουν πολύ δυνατό φόρουμ για να σε βοηθήσουν.Αυτο που σε ενδιαφέρει είναι η string library...http://www.cplusplus.com/reference/clibrary/cstring/ μέσα λογικά θα βρεις οτι ακριβώς θές σε οτι αφορά την μορφοποίηση των string σου αλλά και αναζήτηση μέσα σε αυτά. Επίσης η fscanf σου είναι άχρηστη καθώς χρησιμοποιείται μόνο για μορφοποιημένο κείμενο. Έσυ θα διαβάζεις ολόκληρα string των 80 χαρακτήρων ανα γραμμή οπότε θες την fgets. #include <stdio.h>#include <string.h>#include <stdlib.h>void menu();void readFile();int main(){ menu(); return 0; }void menu(){ int menu; printf("Press number to choose operation!\n"); printf("\n"); printf("1 for Input..\n"); printf("2 to format file...\n"); printf("3 read from file and printing on screen..\n"); printf("4 find a word...\n"); printf("5 delete a word..\n"); printf("6 Exit..\n"); printf("\n"); scanf("%d",&menu); switch (menu) { case 1: readFile(); break; case 2: break; case 3: break; case 4: break; case 5: break; case 6: exit(1); break; }}void readFile(){ char fileName [12]; char string [80]; char drive[]="c:\\"; char ch; int counter=0; printf("Name of the input file(12 characters max): "); scanf("%s",&fileName); strcat(drive, fileName); FILE *fp=fopen(drive,"w"); printf("\n%s\n",drive); if (fp==NULL) { printf("Error while opening file..."); } else { printf("You can now enter data.\n"); do { counter++; printf("\nGive a sting No%d (max characters=80):",counter); gets(string); gets(string); fputs(string,fp); fputs("\n",fp); printf("\nIf you want to continue press 'y' or any other key to exit..."); scanf("%c",&ch); } while (ch=='y' || ch=='Y'); printf("\nYou have entered %d string(s)...",counter); } } Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.