Τα πάντα για την C

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

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

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό clepto » 26 Ιουν 2011, 21:24

δίκιο έχεις :)
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: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 26 Ιουν 2011, 21:25

Α, και για πιο... προχωρημένα όρια ακεραίων δες και το <stdint.h> ;)
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό Qdata » 26 Ιουν 2011, 21:35

clepto έγραψε:ποιος είναι ο μέγιστος int που μπορεί κάποιος να βάλει;
εννοώ πχ μπορεί να βάλει και 5 ψηφία; (10000)


Με 4bytes μπορεί να αναπαρασταθεί αριθμός από -2.147.483.648 μέχρι +2.147.483.647 !Το bit με αριθμό 31(τα 32 bits αριθμούνται από το 0 έως το 31) χρησιμοποιείτε για το πρόσημο και τα υπόλοιπα 31 για την αναπαράσταση του αριθμού.Άρα όπως σου είπε και ο migf1 εξαρτάτε από την πλατφόρμα. :)
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: Τα πάντα για την C/C++

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

migf1 έγραψε:#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// -----------------------------------------------------------------------------
void game( void )
{
   int guess;
   int real = rand() % 100;

   printf("Please type a random number and then hit Enter:\n");
   fflush(stdin); scanf("%d", &guess);

   while (guess != real)
   {
      if (guess < real)
         printf("No it is bigger...\n");
      else
         printf("No it is less...\n");

      printf("Try again: ");
      fflush(stdin); scanf("%d", &guess);
   }

   return;
}

// -----------------------------------------------------------------------------
int main( void )
{
   char yes_no;

   srand( time(NULL) );
   do {
      game();
      printf("Well done!\nDo you want to play again (y/n)? ");
      fflush(stdin);
      scanf("%c", &yes_no);
   } while (  yes_no == 'y' );

   fflush(stdin); getchar();
   return 0;
}

Και πάλι όμως δεν δουλεύει το play again....
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 27 Ιουν 2011, 16:44

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

Re: Τα πάντα για την C/C++

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

migf1 έγραψε:Τι σου κάνει; Σε μένα δουλεύει κανονικά.

Αν πατήσω y αρχίζει και γράφει no it is bigger... και δεν σταματά...
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 27 Ιουν 2011, 22:12

Δυστυχώς είναι το γνωστό πρόβλημα με line-buffering και την scanf() σε περιβάλλον Posix. Δοκίμασε την παρακάτω παραλλαγή του κώδικα...
(έχω βάλει σε σχόλια την παλιά διαδικασία εισόδου)
Κώδικας: Επιλογή όλων

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#define MAXLEN 255+1

// -----------------------------------------------------------------------------
char *s_get(char *s, size_t len)
{
char *cp;

for (cp=s; (*cp=getc(stdin)) != '\n' && (cp-s) < len-1; cp++ )
; // for-loop with empty body
*cp = '\0'; // null-terminate last character

return s;
}

// -----------------------------------------------------------------------------
void game( void )
{
char inbuf[MAXLEN];
int guess;
int real = rand() % 10;

printf("Please type a random number and then hit Enter:\n");
// fflush(stdin);
// scanf("%d", &guess);
s_get( inbuf, MAXLEN );
guess = atoi( inbuf );

while ( guess != real )
{
if (guess < real)
printf("No it is bigger...\n");
else
printf("No it is less...\n");

printf("Try again: ");
// fflush(stdin);
// scanf("%d", &guess);
s_get( inbuf, MAXLEN );
guess = atoi( inbuf );
}

return;
}

// -----------------------------------------------------------------------------
int main( void )
{
char yes_no[MAXLEN];

srand( time(NULL) );
do {
game();
printf("Well done!\nDo you want to play again (y/n)? ");
// fflush(stdin);
// scanf("%c", &yes_no);
s_get(yes_no, MAXLEN);
} while ( *yes_no == 'y' );

return 0;
}

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

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό medigeek » 27 Ιουν 2011, 22:23

stamatiou: είχα κι εγώ κώδικα έτοιμο: viewtopic.php?f=6&t=18969&start=200#p195033 -- κοίταξε το spoiler :P
Ο λόγος που το έβαλα σε spoiler ήταν ότι απλά περίμενα πως θα κοιτάξεις πρώτα τα σφάλματα σου και μετά να δοκιμάσεις να το φτιάξεις μόνος σου. :)
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό stamatiou » 27 Ιουν 2011, 22:31

medigeek έγραψε:stamatiou: είχα κι εγώ κώδικα έτοιμο: viewtopic.php?f=6&t=18969&start=200#p195033 -- κοίταξε το spoiler :P
Ο λόγος που το έβαλα σε spoiler ήταν ότι απλά περίμενα πως θα κοιτάξεις πρώτα τα σφάλματα σου και μετά να δοκιμάσεις να το φτιάξεις μόνος σου. :)

Και σε εκείνο τον κώδικα όταν πατάω y δεν κάνει τίποτα...
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 27 Ιουν 2011, 22:41

Η τελευταία έκδοση που σου έγραψα δουλεύει παντού, αλλά χρησιμοποιεί αυτό που έχουμε συζητήσει τόσες φορές στο φόρουμ, περί διάβασμα της εισόδου ως string και μετατροπή της κατόπιν σε αριθμό (με την συνάρτηση atoi() στο παραπάνω παράδειγμα).

Όσο για της συνθήκη του do-while, εκείνο το *yes_no == 'y' δουλεύει επειδή στη C όταν έχεις ένα οποιοδήποτε string (το yes_no στην περίπτωσή μας) το όνομά του είναι ουσιαστικά δείκτης στον 1ου του χαρακτήρα, άρα το όνομά του με αστέρι μπροστά είναι ο 1ος χαρακτήρας ;)

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

ΠροηγούμενηΕπόμενο

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