PDA

Visualizza la versione completa : [C] Problema di lettura da file


Vinz Clortho
26-10-2005, 23:16
Vi scrivo il codice

queste sono tre funzioni che ho definito

int apriFile1() //apertura del file nn ordinato
{
int ds_file;

ds_file = open(FILE_REC, O_CREAT|O_RDWR|O_APPEND, 0660);
if(ds_file == -1)
{
printf("Errore nell'apertura del file\n");
return -1;
}

return ds_file;
}

char *allocaStringa() {
char *vector;

vector = (char*) malloc(BUF_SIZE*sizeof(char));
memset(vector,0,BUF_SIZE*sizeof(char));

return vector;
}

char *leggiStringa(int ds_file) { // legge una stringa da file e la memorizza in un puntatore di char

int result;
char *stringa = allocaStringa();
char *stringa2 = allocaStringa();

while(*stringa2 != '\n') {
memset(stringa2,0,BUF_SIZE*sizeof(char));
result = read(ds_file,stringa2,sizeof(char));

if(result == -1) {
printf("Errore nella chiamata read\n");
}

strcat(stringa,stringa2);
}

free(stringa2);

return stringa;


e questo è il main di prova che ho fatto

main() {
int ds_file;
char *s1,*s2;

ds_file = apriFile1();

s1 = leggiStringa(ds_file);

for(; *s1 != '\0';s1++)
printf("%c",*s1);

s2 = leggiStringa(ds_file);

for(; *s2 !='\0';s2++)
printf("%c",*s2);

close(ds_file);
return 0;

nel file di testo che ho creato c'è scritto

Gianni
Luigi

legge e stampa Gianni, ma quando tenta di leggere Luigi va in loop...

aiutatemi vi prego nn riesco a capire il motivo...

un grazie anticipato a tutti


p.s non posso utilizzare le funzioni come fopen o fscanf ecc...x vincoli accademici

byaur
27-10-2005, 10:33
:oVVoVe: :oVVoVe:
potresti indentare il codice e usare i tag CODE per maggior comprensione?? :confused: :ciauz:

Vinz Clortho
27-10-2005, 16:07
int apriFile1() //apertura del file nn ordinato
{
int ds_file;

ds_file = open(FILE_REC, O_CREAT|O_RDWR|O_APPEND, 0660);
if(ds_file == -1)
{
printf("Errore nell'apertura del file\n");
return -1;
}

return ds_file;
}

char *allocaStringa() {
char *vector;

vector = (char*) malloc(BUF_SIZE*sizeof(char));
memset(vector,0,BUF_SIZE*sizeof(char));

return vector;
}

char *leggiStringa(int ds_file) { // legge una stringa da file e la memorizza in un puntatore di char

int result;
char *stringa = allocaStringa();
char *stringa2 = allocaStringa();

while(*stringa2 != '\n') {
memset(stringa2,0,BUF_SIZE*sizeof(char))
;
result = read(ds_file,stringa2,sizeof(char));

if(result == -1) {
printf("Errore nella chiamata read\n");
}

strcat(stringa,stringa2);
}

free(stringa2);

return stringa;
}

e questo è il main di prova che ho fatto


main() {
int ds_file;
char *s1,*s2;

ds_file = apriFile1();

s1 = leggiStringa(ds_file);

for(; *s1 != '\0';s1++)
printf("%c",*s1);

s2 = leggiStringa(ds_file);

for(; *s2 !='\0';s2++)
printf("%c",*s2);

close(ds_file);
return 0;

RokStar
27-10-2005, 16:58
Aggiungo un po' di leggibilità al codice...


int apriFile1(){
int ds_file;
ds_file = open(FILE_REC, O_CREAT|O_RDWR|O_APPEND, 0660);
if(ds_file == -1) {
printf("Errore nell'apertura del file\n");
return -1;
}
return ds_file;
}

char *allocaStringa() {
char *vector;
vector = (char*) malloc(BUF_SIZE*sizeof(char));
memset(vector,0,BUF_SIZE*sizeof(char));
return vector;
}

char *leggiStringa(int ds_file) { // legge una stringa da file e la memorizza in un puntatore di char
int result;
char *stringa = allocaStringa();
char *stringa2 = allocaStringa();
while(*stringa2 != '\n') {
memset(stringa2,0,BUF_SIZE*sizeof(char));
result = read(ds_file,stringa2,sizeof(char));
if(result == -1) {
printf("Errore nella chiamata read\n");
}
strcat(stringa,stringa2);
}
free(stringa2);
return stringa;
}

Main:


main() {
int ds_file;
char *s1,*s2;
ds_file = apriFile1();
s1 = leggiStringa(ds_file);
for(; *s1 != '\0';s1++)
printf("%c",*s1);

s2 = leggiStringa(ds_file);

for(; *s2 !='\0';s2++)
printf("%c",*s2);

close(ds_file);
return 0;


Come fai a scrivere codice senza indentare?

Loading