Καλημέρα. Στο 3:35 αναφέρεται "αν ο χρήστης έχει πληκτρολογήσει 3 χαρακτήρες, οι 3 πρώτες θέσεις θα έχουν τους 3 χαρακτήρες, μετά θα έχει αποθηκευθεί το και μετά το \0". Θα έχουμε δλδ κατάληψη 5 θέσεων; το δεν αντικαθίσταται από το \0 ώστε εν τέλει να έχουμε κατάληψη 4 θέσεων; Στη συγκεκριμένη άσκηση παρατηρώ πως αν πληκτρολογήσω 12345678, η συμβολοσειρά αποθηκεύεται κανονικά (φαντάζομαι πως η προτελευταία θέση καταλαμβάνεται από το και η τελευταία από το \0). Αν πληκτρολογήσω 123456789 η συμβολοσειρά δε χωράει να αποθηκευθεί ολόκληρη και στη θέση i-1 δε βρίσκεται το . Βάζοντας printf παρατήρησα ότι: 1. Αν πληκτρολογήσω έως και 8 χαρακτήρες, αποθηκεύονται οι 8 χαρακτήρες, στην 9η θέση είναι το και στη 10η θέση το \0 2. Αν πληκτρολογήσω ακριβώς 9 χαρακτήρες, αποθηκεύονται οι 9 χαρακτήρες, στη 10η θέση πάει το \0 και στην stdin, ίσως μπορούμε να πούμε 11η θέση, είναι το
3. Αν πληκτρολογήσω 10 χαρακτήρες, πχ 1234567890, παρατηρώ πως στην 1η εκτέλεση της fgets εμφανίζονται οι 123456789, στη 2η εκτέλεση το 1ο στοιχείο είναι το 0 και το 2ο στοιχείο είναι το και το 3ο στοιχείο είναι το '\0'
δάσκαλε και ένας εναλλακτικός κώδικας για την επίλυση της ασκησης: #include #include #include #define size 10 #define buffer 100 main() { char string[size]; int i; printf("Eisigage mia simvoloseira:"); fgets(string,buffer,stdin); if(strlen(string)=size) { printf("Den diavastike "); for(i=0; i
char myString[10]; fgets(myString, 10, stdin); int position = 10-1; for (int i = 0; i < sizeof(myString)/sizeof(char); i++) { if (myString[i]=='\0') { position = i; break; } } if (myString[position-1]==' ' ||getchar()==' ') { myString[position - 1] = '\0'; printf("h sumboloseira xwrese oloklhrh kai einai:%s ", myString); } else { printf("h sumboloseira de xwrese oloklhrh. to meros pou xwrese einaI:%s ", myString); }
#include #define SIZE 10 int mygets(char *str,int n); int main() { char str[SIZE]; if(mygets(str,SIZE)==-1) { printf("String Not Fully Red "); fflush(stdin); } printf("%s",str); return 0; } int mygets(char *str,int n) { int i,c=0; for(i=0; i
Ναι γενικά κάνουμε κάποιες ασκήσεις που προσομοιώνουμε συναρτήσεις βιβλιοθήκης, αλλά προτιμούμε αυτές που είναι στην βιβλιοθήκη, γιατί ίσως να μην έχουμε κάτι προβλέψει κ.λπ. Ωστόσο ιδίως για το εκπαιδευτικό στάδιο, είναι εξαιρετικά ωφέλιμο αυτό που κάνεις.
Καλημέρα. Στο 3:35 αναφέρεται "αν ο χρήστης έχει πληκτρολογήσει 3 χαρακτήρες, οι 3 πρώτες θέσεις θα έχουν τους 3 χαρακτήρες, μετά θα έχει αποθηκευθεί το
και μετά το \0". Θα έχουμε δλδ κατάληψη 5 θέσεων; το
δεν αντικαθίσταται από το \0 ώστε εν τέλει να έχουμε κατάληψη 4 θέσεων; Στη συγκεκριμένη άσκηση παρατηρώ πως αν πληκτρολογήσω 12345678, η συμβολοσειρά αποθηκεύεται κανονικά (φαντάζομαι πως η προτελευταία θέση καταλαμβάνεται από το
και η τελευταία από το \0). Αν πληκτρολογήσω 123456789 η συμβολοσειρά δε χωράει να αποθηκευθεί ολόκληρη και στη θέση i-1 δε βρίσκεται το
.
Βάζοντας printf παρατήρησα ότι:
1. Αν πληκτρολογήσω έως και 8 χαρακτήρες, αποθηκεύονται οι 8 χαρακτήρες, στην 9η θέση είναι το
και στη 10η θέση το \0
2. Αν πληκτρολογήσω ακριβώς 9 χαρακτήρες, αποθηκεύονται οι 9 χαρακτήρες, στη 10η θέση πάει το \0 και στην stdin, ίσως μπορούμε να πούμε 11η θέση, είναι το
3. Αν πληκτρολογήσω 10 χαρακτήρες, πχ 1234567890, παρατηρώ πως στην 1η εκτέλεση της fgets εμφανίζονται οι 123456789, στη 2η εκτέλεση το 1ο στοιχείο είναι το 0 και το 2ο στοιχείο είναι το
και το 3ο στοιχείο είναι το '\0'
Το else, γιατι δε μπορει κατευθειαν να ειναι: printf("! ...%s",str);fflush(stdin)
H διαφοροποίηση γίνεται για τη σωστή εκτύπωση του μηνύματος στις δύο περιπτώσεις.
δάσκαλε και ένας εναλλακτικός κώδικας για την επίλυση της ασκησης:
#include
#include
#include
#define size 10
#define buffer 100
main()
{
char string[size];
int i;
printf("Eisigage mia simvoloseira:");
fgets(string,buffer,stdin);
if(strlen(string)=size)
{
printf("Den diavastike
");
for(i=0; i
char myString[10];
fgets(myString, 10, stdin);
int position = 10-1;
for (int i = 0; i < sizeof(myString)/sizeof(char); i++)
{
if (myString[i]=='\0')
{
position = i;
break;
}
}
if (myString[position-1]=='
' ||getchar()=='
')
{
myString[position - 1] = '\0';
printf("h sumboloseira xwrese oloklhrh kai einai:%s
", myString);
}
else
{
printf("h sumboloseira de xwrese oloklhrh. to meros pou xwrese einaI:%s
", myString);
}
#include
#define SIZE 10
int mygets(char *str,int n);
int main()
{
char str[SIZE];
if(mygets(str,SIZE)==-1)
{
printf("String Not Fully Red
");
fflush(stdin);
}
printf("%s",str);
return 0;
}
int mygets(char *str,int n)
{
int i,c=0;
for(i=0; i
Ναι γενικά κάνουμε κάποιες ασκήσεις που προσομοιώνουμε συναρτήσεις βιβλιοθήκης, αλλά προτιμούμε αυτές που είναι στην βιβλιοθήκη, γιατί ίσως να μην έχουμε κάτι προβλέψει κ.λπ.
Ωστόσο ιδίως για το εκπαιδευτικό στάδιο, είναι εξαιρετικά ωφέλιμο αυτό που κάνεις.