Jump to content



Μορφοποιηση,δημιουρια αρχειου σε c


giannis-21

Recommended Posts

παιδες εχω αναιβασει μια ασκηση καιο θελω βοηθεια.. οριστε ενας κοδικας που εχω κανει μεχρι τωρα :

#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

Με μια γρήγορη ματιά:

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


#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

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

Archived

This topic is now archived and is closed to further replies.

×
×
  • Δημιουργία...

Important Information

Ο ιστότοπος theLab.gr χρησιμοποιεί cookies για να διασφαλίσει την καλύτερη εμπειρία σας κατά την περιήγηση. Μπορείτε να προσαρμόσετε τις ρυθμίσεις των cookies σας , διαφορετικά θα υποθέσουμε ότι είστε εντάξει για να συνεχίσετε.