Απορρία για scrip C

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Απορρία για scrip C

Δημοσίευσηαπό stamatiou » 16 Ιουν 2011, 23:11

Παιδιά, στο συγκεκρυμένο σκρίπτ έχω μια απορρία:
Κώδικας: Επιλογή όλων
#include <stdio.h>

main()
{
int c, i, nwhite, nother;
int ndigit[10];

nwhite = nother = 0;
for (i = 0; i < 10; ++i)
ndigit[i] = 0;

while ((c = getchar()) != EOF)
if (c >= '0' && c <= '9')
++ndigit[c-'0'];
else if (c == ' ' || c == '\n' || c == '\t')
++nwhite;
else
++nother;

printf("digits =");
for (i = 0; i < 10; ++i)
printf(" %d", ndigit[i]);
printf(", white space = %d, other = %d\n",
nwhite, nother);
}

εκεί που γράφει
if (c >= '0' && c <= '9')
++ndigit[c-'0'];
γιατί τα νούμερα έχουν ' ;
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Απορρία για scrip C

Δημοσίευσηαπό clepto » 16 Ιουν 2011, 23:18

γιατί δεν γράφεις τις απορίες στο αντίστοιχο θέμα; viewtopic.php?f=6&t=18969&start=90
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: Απορρία για scrip C

Δημοσίευσηαπό konnn » 16 Ιουν 2011, 23:54

stamatiou έγραψε:c = getchar()
1 Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Προχωρημένος
2 Desktop : Ubuntu 16.04 64bit
a Intel Core i3 CPU 530 2.93GHz ‖ RAM 3824 MiB ‖ Intel DH55HC -
b nVidia Device [10de:1040] (rev a1)
c eth0: Intel 82578DC Gigabit Network Connection
3 Notebook : Ubuntu 16.04 64 bit
a Intel Core i3-2365M CPU @ 1.40GHz ‖ RAM 3854 MiB ‖ LENOVO 20197
b Intel 2nd Generation Core Processor Family Integrated Graphics Controller
c 5 wlan0: Intel Centrino Wireless-N 2230 ⋮ eth0: Realtek RTL8101E/RTL8102E

Αυτόματη υπογραφή.
Άβαταρ μέλους
konnn
Συντονιστής
Συντονιστής
 
Δημοσιεύσεις: 3568
Εγγραφή: 12 Ιούλ 2010, 17:54
Τοποθεσία: Καλαμάτα
Launchpad: konnn
Εκτύπωση

Re: Απορρία για scrip C

Δημοσίευσηαπό stamatiou » 17 Ιουν 2011, 00:05

konnn έγραψε:
stamatiou έγραψε:c = getchar()

??
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Απορρία για scrip C

Δημοσίευσηαπό Qdata » 17 Ιουν 2011, 00:31

stamatiou έγραψε:
konnn έγραψε:
stamatiou έγραψε:c = getchar()

??


Περιμένεις ως είσοδο χαρακτήρα άρα πρέπει να τον δηλώσεις μέσα σε εισαγωγικά αλλιώς το 0 σκέτο αντιλαμβάνεται ως αριθμός και όχι ως χαρακτήρας.
Linux User: #530165
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 11.04 32bit σε Intel(R) Atom(TM) CPU N270 @ 1.60GHz
(Notebook) Προδιαγραφές ⇛ 2x Intel(R) Atom(TM) CPU N270 @ 1.60GHz │ 1016MB │ HDA-Intel - HDA Intel -- USB-Audio - USB AUDIO│ 1024x600 pixels
Νέος στο Linux?Οδηγοί - How to - Tutorials
Qdata
powerTUX
powerTUX
 
Δημοσιεύσεις: 1875
Εγγραφή: 18 Ιουν 2010, 19:40
Τοποθεσία: Σέρρες
IRC: dimos
Εκτύπωση

Re: Απορρία για scrip C

Δημοσίευσηαπό konnn » 17 Ιουν 2011, 00:32

stamatiou έγραψε:
konnn έγραψε:
stamatiou έγραψε:c = getchar()

??

Θεωρώ πως θέλει να συγκρίνει τον χαρακτήρα της getchar με ένα αριθμό αλλά επειδή ο c είναι char πρέπει να συγκριθεί με κάτι που βρίσκεται μέσα σε ' ' , για τους γνωστούς λόγους.Δε ξέρω κατά πόσο είναι σωστός ο κώδικάς αλλά το compile το περνά.Καλύτερη μέθοδος, για 'μένα, θα ήταν να πει
έγραψε:i=(int)c...if(i<=10)....
1 Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Προχωρημένος
2 Desktop : Ubuntu 16.04 64bit
a Intel Core i3 CPU 530 2.93GHz ‖ RAM 3824 MiB ‖ Intel DH55HC -
b nVidia Device [10de:1040] (rev a1)
c eth0: Intel 82578DC Gigabit Network Connection
3 Notebook : Ubuntu 16.04 64 bit
a Intel Core i3-2365M CPU @ 1.40GHz ‖ RAM 3854 MiB ‖ LENOVO 20197
b Intel 2nd Generation Core Processor Family Integrated Graphics Controller
c 5 wlan0: Intel Centrino Wireless-N 2230 ⋮ eth0: Realtek RTL8101E/RTL8102E

Αυτόματη υπογραφή.
Άβαταρ μέλους
konnn
Συντονιστής
Συντονιστής
 
Δημοσιεύσεις: 3568
Εγγραφή: 12 Ιούλ 2010, 17:54
Τοποθεσία: Καλαμάτα
Launchpad: konnn
Εκτύπωση

Re: Απορρία για scrip C

Δημοσίευσηαπό stamatiou » 17 Ιουν 2011, 00:33

Και γιατί άμα είναι αριθμός δεν δουλεύει;
Και γιατί πρέπει εκεί που λέει ++ndigit[c-'0'] δεν γράφω σκέτο c;
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Απορρία για scrip C

Δημοσίευσηαπό migf1 » 17 Ιουν 2011, 01:10

stamatiou έγραψε:Και γιατί άμα είναι αριθμός δεν δουλεύει;
Και γιατί πρέπει εκεί που λέει ++ndigit[c-'0'] δεν γράφω σκέτο c;


Στην C τα char είναι ουσιαστικά int και συγκεκριμένα είναι τα ASCII Codes των χαρακτήρων. Οπότε όταν γράφεις:
Κώδικας: Επιλογή όλων
if (c == '9')

ισοδυναμεί με:
Κώδικας: Επιλογή όλων
if (c == 57)
επειδή 57 είναι ο κωδικός του χαρακτήρα '9' στο ASCII table.

Αντίστοιχα, το:
Κώδικας: Επιλογή όλων
if (c == 9)

ελέγχει αν ο c είναι ο χαρακτήρας με ASCII code ίσο με 9 (που είναι ο χαρακτήρας του tab). Συμπτωματικά, για τον χαρακτήρα του tab η C έχει ειδικό σύμβολο, το '\t' (όπως για το ENTER έχει το '\n', κλπ).

Οπότε, συμπτωματικά επειδή πιάσαμε το 9, το παραπάνω θα μπορούσε να γραφτεί κι έτσι:
Κώδικας: Επιλογή όλων
if (c == '\t')
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Απορρία για scrip C

Δημοσίευσηαπό migf1 » 17 Ιουν 2011, 01:15

Btw, μη τα λες σκριπτς, στη C λέγονται (και είναι) προγράμματα :)
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση


Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι