stammmmmm Δημοσ. 15 Μαΐου 2016 Δημοσ. 15 Μαΐου 2016 καλησπερα!! Αν γινεται ας μου εξηγησει καποιος γτ οταν μου ζηταει τον δευτερο χαρακτηρα μετα βγαζει παραθυρο των windows και μου λεει οτι σταματησε να δουλευει...Ευχαριστω πολυ #include <stdio.h>main(){ int sum=0; int a,k; char charac; printf("give a character: "); scanf("%c",&charac); a=1; while (sum<=500&&charac!='q') { printf("give a character: "); scanf("%c",charac); a++; k=charac; sum=sum+k; } printf("to plhthos twn arithmwn pou diabasthkan einai %d",a); return 0;}
Dinos_12345 Δημοσ. 15 Μαΐου 2016 Δημοσ. 15 Μαΐου 2016 Να γράψω και γιατί συμβαίνει αυτό. Όταν λες scanf("%c",charac); ο compiler πάει στη θέση μνήμης που βρίσκεται η μεταβλητή σου και προσπαθεί να αλλάξει την τιμή της(θέσης μνήμης) με αυτή που έλαβε από τη scanf. Όταν γράφεις scanf("%c",&charac); του λες, "άντε σε εκείνη τη θέση μνήμης και αντικατέστησε το περιεχόμενο της με αυτό που θα πάρεις από τη scanf". Το σύστημα δεν σου δίνει δικαίωμα να πειράζεις τις θέσεις μνήμης, μόνο το περιεχόμενο τους, hence the crash 1
gon1332 Δημοσ. 15 Μαΐου 2016 Δημοσ. 15 Μαΐου 2016 Θέλεις να περάσεις ως παράμετρο τη διεύθυνση μιας μεταβλητής γιατί η scanf αλλάζει την τιμή της. Αν περάσεις τα περιεχόμενά της, τότε η scanf τα λαμβάνει σα μια διεύθυνση η οποία στις περισσότερες περιπτώσεις είναι άκυρη τιμή. Στο runtime γίνονται αυτά, όχι κατά το compilation. Προσπάθησε να καταλάβεις τι γίνεται εδώ: #include <stdio.h> int main(void) { unsigned int damn = &damn+0x1; scanf("%u", damn); printf("%u\n", *(&damn+0x1)); return 0; } http://ideone.com/iuk9Yc
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα