Προσπέραση scanf χωρίς καμία είσοδο  Το θέμα επιλύθηκε

...ασύγχρονα μαθήματα γλώσσας C

Re: Προσπέραση scanf χωρίς καμία είσοδο

Δημοσίευσηαπό simosx » 26 Μάιος 2011, 16:36

linuxs έγραψε:
simosx έγραψε:Η πηγή του προβλήματος είναι ότι θέλεις να έχεις «getch()» που υπάρχει σε MSDOS/Windows.
Η λύση του προβλήματος είναι να χρησιμοποιήσεις το σωστό εργαλείο για getch(), και το βρίσκεις με αναζήτηση στο διαδίκτυο για «getch linux».


Δεν πολυκατάλαβα τι θέλεις να πείς... :/ Δηλαδή? Το πρόβλημα μου δεν έχει καμια σχέση με windows...


Αν θέλεις να υλοποιήσεις την εντολή «πάτησε ένα πλήκτρο για να συνεχίσεις», πρέπει να το κάνεις μέσω ειδικής βιβλιοθήκης. Και το βρίσκεις με αναζήτηση για «getch linux». Διαφορετικά έχεις buffered input, που δημιουργεί ένα σωρό προβλήματα.
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Προσπέραση scanf χωρίς καμία είσοδο

Δημοσίευσηαπό medigeek » 26 Μάιος 2011, 17:15

Αυτό που πρότεινα δε λύνει το πρόβλημα;
Κύπριος; Κόπιασε στο 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: Προσπέραση scanf χωρίς καμία είσοδο

Δημοσίευσηαπό linuxs » 29 Μάιος 2011, 17:39

Σύμφωνα με το manual της scanf θα πρέπει να παιζει και το
Κώδικας: Επιλογή όλων
scanf(" %d", &x); //όπου x integer
. Προσέξτε το κενό. ;) ;)

έγραψε:Ερώτηση: Αν χρησιμοποιήσω

Κώδικας: Επιλογή όλων
int c, var, var2;


ή

Κώδικας: Επιλογή όλων
char c, var, var2;



Το αποτέλεσμα είναι το ίδιο. Ποιο είναι το σωστό; Ή είναι τα ίδια; :?


Εννοείς για τον κώδικα που είχα ποστάρει στην αρχή έτσι? :/ Φυσικά, δεν είναι το ίδιο. Προσψπικά όταν θέλω να κάνω σύγκριση με χαρακτήρες όπως 'y', 'Y' κτλ. χρησιμοποιώ char. Αν πάλι θέλω να τσεκάρω NULL η κάποιον άλλο αριθμό χρησιμοποιώ int. Τώρα, χωρίς να είμαι απόλυτα σίγουρος το αποτέλεσμα μπορεί να είναι το ίδιο αλλα απο θέμα κώδικα η σύγκριση είναι διαφορετική. Για παράδειγμα μπορεί να σου παίζει έτσι αλλα αν έχεις ορίσει char και πας να
Κώδικας: Επιλογή όλων
x++;

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

Επίσης υποθέτω πως αν χρησιμοποιήσεις int απλά το μόνο που αλλάζει είναι να δεσμεύσει άλλο αριθμό bytes απο την μνήμη. Αυτό εξαρτάται και απο το σύστημα(32 'η 64 bit αν θυμάμαι καλά απο ένα πρόγραμμα που είχε κάνει o @simos). Οπότε σε 32 bit οι ακέραιοι θα πρέπει να είναι 4 byte(νομίζω ;)). Nevermind, αυτό βρίσκεται εύκολα με μια ανζήτηση στο google. Το point μου είναι οτι απλά αλλάζουν τα bytes που δεσμεύεις. Αυτή είναι η άποψη μου χωρίς να είμαι απόλυτα σίγουρος...
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: Προσπέραση scanf χωρίς καμία είσοδο

Δημοσίευσηαπό medigeek » 29 Μάιος 2011, 20:24

ευχαριστώ :)
Κύπριος; Κόπιασε στο 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: Προσπέραση scanf χωρίς καμία είσοδο

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

Πριν από κάθε scanf() βάζε ένα fflush(stdin); ώστε να καθαρίζει το input buffer (ομοίως και πριν από κάθε στάνταρ συνάρτηση διαβάσματος ;) )
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Προσπέραση scanf χωρίς καμία είσοδο

Δημοσίευσηαπό linuxs » 03 Ιουν 2011, 20:47

Δεν θυμάμαι....υπάρχει και στην C αυτό?
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: Προσπέραση scanf χωρίς καμία είσοδο

Δημοσίευσηαπό migf1 » 03 Ιουν 2011, 20:58

linuxs έγραψε:Δεν θυμάμαι....υπάρχει και στην C αυτό?

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

Re: Προσπέραση scanf χωρίς καμία είσοδο

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

Εμ νομίζω ότι δοκίμασα το fflush και δε δούλεψε. Επίσης κάπου πάλι διάβασα ότι δεν συνιστάται.
Κύπριος; Κόπιασε στο 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: Προσπέραση scanf χωρίς καμία είσοδο

Δημοσίευσηαπό migf1 » 03 Ιουν 2011, 23:50

medigeek έγραψε:Εμ νομίζω ότι δοκίμασα το fflush και δε δούλεψε. Επίσης κάπου πάλι διάβασα ότι δεν συνιστάται.

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

Re: Προσπέραση scanf χωρίς καμία είσοδο

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

Btw, το προγραμματάκι εγώ θα το έγραφα κάπως έτσι (ώστε να μην έχει και όριο 63+1 χαρακτήρων ανά γραμμή)...

Κώδικας: Επιλογή όλων

/********************************************************************************
Άνοιγμα ενός αρχείου txt που επιλέγει ο χρήστης και εκτύπωση των αποτελεσμάτων.
Για να αρχίσει να εκτελείτε το πρόγραμμα θα πρέπει ο χρήστης να το εκτελέσει,
δίνοντας μαζί και τo αρχείο που θέλει να διαβάσει!
********************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main( int argc, char **argv )
{
FILE *fp;
int c;

putchar('\n');

if ( !argv[1] ) {
puts("*** error: you didn't supply a file at the command-line");
printf("\npress ENTER to exit... ");
fflush(stdin); getchar();
exit(1);
}

fp = fopen( argv[1], "r" );
if ( !fp ) {
printf( "*** error: file %s does not exist, press ENTER to exit...", argv[1] );
fflush(stdin); getchar();
exit(1);
}

printf("File %s opened successfully, should I dump it on the screen (y/ )?" , argv[1]);
fflush(stdin);
if ( tolower( getchar() ) == 'y' )
{
while ( (c=getc(fp)) != EOF )
putchar(c);
fclose( fp );

putchar('\n');

printf("Shoud I clear the screen ( y/ )? ");
fflush( stdin );
if ( tolower( getchar() ) == 'y' )
puts("\033[H\033[J");
}

printf("\npress ENTER to exit...");
fflush(stdin); getchar();
exit(0);
}

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

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

Επιστροφή στο Μαθήματα C

cron