johnp92 Δημοσ. 6 Ιουνίου 2011 Δημοσ. 6 Ιουνίου 2011 >#include <stdio.h> #include <stdlib.h> int main (void){ FILE* fp; int i,ret; char c; char fname[15]; int x=0; printf("enter file name: "); gets(fname); fp = fopen (fname,"r+"); if(fp==NULL){printf("file cannot be opened");exit(EXIT_FAILURE);} printf("Times the i*i loop will be executed: "); scanf("%d",&x); while (x>0){ printf("enter number: "); scanf("%d",&i); fprintf(fp,"%d^2 = %d\n",i,i*i); x--;} while(x=0){ ret = fscanf(fp,"%c",&c); if(ret != 1) break; printf("%c",c);} fclose(fp);return 0;} Το πρόβλημα μου είναι ότι το πρόγραμμα παραλείπει την δεύτερη while για κάποιο λόγο. Αυτό που θέλω να κάνω είναι : Διάβασε Ν αριθμούς από πληκτρολόγιο και αποθήκευσε τα τετράγωνα τους σε ένα αρχείο κείμενου. Έπειτα διάβασε από το αρχείο και τύπωσε στην οθόνη. ps. Έφτιαξα ένα πρόγραμμα με μόνο την πρώτη while και δουλεύει , και ένα άλλο με μόνο την δεύτερη και επίσης δουλεύει.
mtsouk Δημοσ. 6 Ιουνίου 2011 Δημοσ. 6 Ιουνίου 2011 (x=0) == 0 == false Τώρα δεν το θυμάμαι και καλά αλλά νομίζω ότι αφού το assign δουλεύει (δηλαδή επιτυχώς γίνεται x=0) θα πρέπει να επιστρέφει 1 (δηλαδή true). φιλικά,
johnp92 Δημοσ. 6 Ιουνίου 2011 Μέλος Δημοσ. 6 Ιουνίου 2011 >#include <stdio.h> #include <stdlib.h> int main (void){ FILE* fp; int i,ret; char c; char fname[15]; int x=0; printf("enter file name: "); gets(fname); fp = fopen (fname,"w"); if(fp==NULL){printf("file cannot be opened");exit(EXIT_FAILURE);} printf("Times the i*i loop will be executed: "); scanf("%d",&x); while (x>0){ printf("enter number: "); scanf("%d",&i); fprintf(fp,"%d^2 = %d\n",i,i*i); x--;} fclose(fp); /*κλείσιμο αρχείου*/ fp = fopen (fname,"r"); /*άνοιγμα αρχείου για ανάγνωση*/ if(fp==NULL){printf("file cannot be opened");exit(EXIT_FAILURE);} while(x==0){ ret = fscanf(fp,"%c",&c); if(ret != 1) break; printf("%c",c);} fclose(fp);return 0;} Καταρχάς ευχαριστώ για τις απαντήσεις σας. Λοιπόν αυτό που έκανα για να δουλέψει είναι ότι άνοιξα το αρχείο μια με writte το έκλεισα και το ξανάνοιξα με read αυτή την φορά. Δεν ξέρω όμως αν αυτό ήταν απαραίτητο. EDIT: φαντάζομαι οτι επειδή δεν έκλινα το αρχείο , τα δεδομένα δεν γίνονταν save και άρα η δεύτερη while απλά δεν είχε τίποτα να δείξει.
parsifal Δημοσ. 6 Ιουνίου 2011 Δημοσ. 6 Ιουνίου 2011 Όχι, δεν είναι απαραίτητο. Μπορείς απλά να χρησιμοποιήσεις τη rewind.
johnp92 Δημοσ. 6 Ιουνίου 2011 Μέλος Δημοσ. 6 Ιουνίου 2011 Όχι, δεν είναι απαραίτητο. Μπορείς απλά να χρησιμοποιήσεις τη rewind. Επειδή τώρα μαθαίνω τα περί διαχείρισης αρχείων.Εαν μπορούσες κάποια στιγμή να κάνεις τις κατάλληλες μετατροπές στον κώδικα που έχω παραθέσει χρησιμοποιώντας την rewind θα σου ήμουν υπόχρεος. Θα με διευκόλυνες πολύ ως προς την κατανόηση της.
parsifal Δημοσ. 6 Ιουνίου 2011 Δημοσ. 6 Ιουνίου 2011 Ορίστε με rewind, συν μερικές ακόμη αλλαγές που έκανα για να γίνει ο κώδικας πιο σωστός και ασφαλής, κατά τη γνώμη μου: > #include <stdio.h> int main(void) { char buffer[255]; FILE* fp; int times, i, number; printf("enter file name: "); fgets(buffer, sizeof(buffer), stdin); fp = fopen(buffer, "w+"); if(!fp) { printf("file cannot be opened\n"); return 1; } printf("Times the i * i loop will be executed: "); scanf("%d", ×); for(i = 0; i < times; i++) { printf("enter number: "); scanf("%d", &number); fprintf(fp, "%d ^ 2 = %d\n", number, number * number); } rewind(fp); while(fgets(buffer, sizeof(buffer), fp)) { printf("%s", buffer); } fclose(fp); return 0; } Οτιδήποτε δεν καταλαβαίνεις, τσέκαρε σχετικά στο http://www.cplusplus.com. Αν εξακολουθείς να μην καταλαβαίνεις, ρωτάς.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.