Προς το περιεχόμενο

files+structs πρόβλημα στη εκτύπωση των αποτελεσμάτων


linuxs

Προτεινόμενες αναρτήσεις

Δημοσ.

Το τηλέφωνο γιατί δεν αλλάζει και παραμένει ο ίδιος αριθμός?

>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Details{
char l_name[81];
char f_name[81];
char email[81];
int tel;
};

int main(void){
FILE *infile;
struct Details det;
int cont_num, cont_stats;

	infile=fopen("lala.txt","r+");
	if(infile==NULL){
		printf("file didn' t found.\n");
		exit(1);
	}
		printf("file found.\n");

	fscanf(infile,"%d %d", &cont_num, &cont_stats);
	printf("There are %d contacts.\n", cont_num);
	printf("There are %d statistics in every contact.\n", cont_stats);

	while(fscanf(infile,"%s %s %s %d", det.f_name, det.l_name, det.email, &det.tel)!=EOF){
		printf("first name: %s\tlast name: %s\te-mail: %s\ttelephone: %d\t\n", det.f_name, det.l_name, det.email, det.tel);
	} 
	
return 0;
}

Δημοσ.

Ίσως να μην δημιούργησα σωστά το αρχείο αλλά δείχνει να δουλεύει σε μένα.

Το αρχείο έχει

>
10 5 (Δεν είδα να κάνουν κάτι εκτός απο το να εμφανίζονται)
Linus Torvalds [email protected] 12345
Richard Stallman [email protected] 34567
Theo Raadt [email protected] 56789

Και το πρόγραμμα εμφανίζει

>
file found.
There are 10 contacts.
There are 5 statistics in every contact.
first name: Linus       last name: Torvalds     e-mail: [email protected]     telephone: 12345
first name: Richard     last name: Stallman     e-mail: [email protected]     telephone: 34567
first name: Theo        last name: Raadt        e-mail: [email protected]     telephone: 56789

Οπότε το τηλέφωνο αλλάζει όπως έπρεπε.

Δημοσ.
Ίσως να μην δημιούργησα σωστά το αρχείο αλλά δείχνει να δουλεύει σε μένα.

Το αρχείο έχει

>
10 5 (Δεν είδα να κάνουν κάτι εκτός απο το να εμφανίζονται)
Linus Torvalds [email protected] 12345
Richard Stallman [email protected] 34567
Theo Raadt [email protected] 56789

Και το πρόγραμμα εμφανίζει

>
file found.
There are 10 contacts.
There are 5 statistics in every contact.
first name: Linus       last name: Torvalds     e-mail: [email protected]     telephone: 12345
first name: Richard     last name: Stallman     e-mail: [email protected]     telephone: 34567
first name: Theo        last name: Raadt        e-mail: [email protected]     telephone: 56789

Οπότε το τηλέφωνο αλλάζει όπως έπρεπε.

 

έχεις απόλυτο δίκιο...αυτό παίζει και σε μένα...κάνε μου μια χάρη, δοκίμασε με κανονικά σταθερά τηλέφωνα πχ. 2651089453 κτλ.

Δημοσ.
έχεις απόλυτο δίκιο...αυτό παίζει και σε μένα...κάνε μου μια χάρη, δοκίμασε με κανονικά σταθερά τηλέφωνα πχ. 2651089453 κτλ.

 

Ο μεγιστος integer αριθμός ειναι 2.147.483.647 οποτε μαλλον φταιει το overflow που συμβαινει. Βαλε τα τηλέφωνα ως string καλυτερα ή unsined long αν θες να ειναι αριθμοι.

Δημοσ.
έχεις απόλυτο δίκιο...αυτό παίζει και σε μένα...κάνε μου μια χάρη, δοκίμασε με κανονικά σταθερά τηλέφωνα πχ. 2651089453 κτλ.

 

βαλτο long long int για να έχεις τουλάχιστον 8 bytes διαθέσιμα

Aν δε σε καλύπτει ούτε αυτό, κάνε αυτό που σου είπε ο αποπάνω..

Δημοσ.
βαλτο long long int για να έχεις τουλάχιστον 8 bytes διαθέσιμα

Aν δε σε καλύπτει ούτε αυτό, κάνε αυτό που σου είπε ο αποπάνω..

 

και εγω σκέφτηκα να τα περάσω σαν strings απλά είχα την απορία...oπότε overflow....ευχαριστώ,..

Δημοσ.

πάντως, conceptually, είναι λάθος να αποθηκεύεις τον αρ. τηλεφώνου ως αριθμό γιατί απλά δεν είναι αριθμός (δεν τον πολλαπλασιάζεις, δεν τον προσθέτεις, δεν τον στρογγυλοποιεις). Είναι ένας κωδικός, ενα αλφαριθμιτικό, άσχετα αν οι χαρακτήρες που χρησιμοποιούνται ειναι μεταξύ 0 και 9.....

Οπότε, γενικα, ο σωστός τύπος μεταβλητής για τηλέφωνα, πινς, αριθμους πιστωτικων καρτων κτλ ειναι string....

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

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