Προς το περιεχόμενο

C - Γίνονται και πώς;


xpapias

Προτεινόμενες αναρτήσεις

Δημοσ.

Γειά χαρά! Θα ήθελα να ρωτήσω αν γίνονται και πώς στην C τα εξής:

 

- Να τοποθετώ τον κέρσορα (σε DOS εφαρμογή) σε κάποιο σημείο της οθόνης (σαν την LOCATE Χ,Υ της Basic)

- Να χρωματίζω το κείμενο μου ή το background σε συγκεκριμένο κείμενο (και όχι όλη την οθόνη)

- Να παίρνω από το πληκτρολόγιο το πάτημα των βελών (πάνω, κάτω, αριστερά κλπ)

 

 

Υπάρχουν όλα αυτά με κάποιο τρόπο/βιβλιοθήκη ή ζητάω πολλά

 

 

edit:Κάτι βρήκα με escape sequences πχ για το Locate

printf("\e[2;2f Hello world!\n");

όμως δεν μου δουλεύει :-(

Δημοσ.
Γειά χαρά! Θα ήθελα να ρωτήσω αν γίνονται και πώς στην C τα εξής:

 

- Να τοποθετώ τον κέρσορα (σε DOS εφαρμογή) σε κάποιο σημείο της οθόνης (σαν την LOCATE Χ,Υ της Basic)

- Να χρωματίζω το κείμενο μου ή το background σε συγκεκριμένο κείμενο (και όχι όλη την οθόνη)

- Να παίρνω από το πληκτρολόγιο το πάτημα των βελών (πάνω, κάτω, αριστερά κλπ)

 

 

Υπάρχουν όλα αυτά με κάποιο τρόπο/βιβλιοθήκη ή ζητάω πολλά

 

 

edit:Κάτι βρήκα με escape sequences πχ για το Locate

printf("\e[2;2f Hello world!\n");

όμως δεν μου δουλεύει :-(

1

2

under Windows..

Δημοσ.
Γειά χαρά! Θα ήθελα να ρωτήσω αν γίνονται και πώς στην C τα εξής:

 

- Να τοποθετώ τον κέρσορα (σε DOS εφαρμογή) σε κάποιο σημείο της οθόνης (σαν την LOCATE Χ,Υ της Basic)

- Να χρωματίζω το κείμενο μου ή το background σε συγκεκριμένο κείμενο (και όχι όλη την οθόνη)

- Να παίρνω από το πληκτρολόγιο το πάτημα των βελών (πάνω, κάτω, αριστερά κλπ)

 

 

Υπάρχουν όλα αυτά με κάποιο τρόπο/βιβλιοθήκη ή ζητάω πολλά

 

 

edit:Κάτι βρήκα με escape sequences πχ για το Locate

printf("\e[2;2f Hello world!\n");

όμως δεν μου δουλεύει :-(

 

Το πρότυπο ANSI C δυστυχώς δεν ορίζει κάποιες συγκεκριμένες (στάνταρ δηλαδή) ρουτίνες για τέτοιου είδους εργασίες πετώντας λοιπόν το μπαλάκι στους κατασκευαστές των compilers που καλούνται να υλοποιήσουν αυτού του είδους τις ρουτίνες με βάση τα ιδιαίτερα χαρακτηριστικά κάθε λειτουργικού συστήματος (πχ. MS-DOS, MS-Windows, Unix κτλ).

 

Επί του προκείμενου λοιπόν, εάν δουλεύεις με κάποιον MS-DOS ή ακόμα και MS-Windows 32-bit compiler της Borland (νυν CodeGear) όπως τον Turbo C++ 3.0 (DOS), τον C/C++ Builder (Windows) ή τον ελεύθερο BCC32 (Borland C++ Compiler) μπορείς να χρησιμοποιήσεις τις παρακάτω ρουτίνες από το conio.h (#include <conio.h>) –εξυπακούεται ότι εάν προγραμματίζεις σε Windows, η εφαρμογή σου θα πρέπει να είναι «Πρόγραμμα Κονσόλας»

 

  1. gotoxy(int x,int y) - λειτουργεί όπως η LOCATE.
  2. textcolor(int color) - αλλάζει το χρώμα των χαρακτήρων του κειμένου μας.
  3. textbackground(int color) – αλλάζει το χρώμα του φόντου του κειμένου μας.
  4. getch() - λαμβάνει είσοδο από το πληκτρολόγιο, εάν πρόκειται για ειδικό πλήκτρο (πχ. Βελάκια) στην πρώτη κλήση επιστρέφει μηδέν (0) και στην αμέσως επόμενη κλήση της επιστρέφει τον κωδικό του πλήκτρου.
  5. cprintf – λειτουργεί σχεδόν όπως η C printf με την διαφορά όμως α)πως τυπώνει το κείμενο μας με βάση τα χρώματα που ορίσαμε στην textcolor & textbackground σε αντίθεση με την printf που τα αγνοεί και β)αντί για \n πρέπει να δίνεις \r\n για σωστή αλλαγή γραμμής.

Υ.Γ.

1. Την εποχή του DOS οι περισσότεροι (αλλά όχι όλοι οι) compilers συνήθως ακολουθούσαν τις παραπάνω Borland ρουτίνες.

2. Τα (ANSI) Escape sequences που βρήκες απαιτούν την ύπαρξη του ANSI.SYS device driver ώστε να μετατραπούν σε κατανοητές από το MS-DOS εντολές διαφορετικά όπως παρατήρησες δεν δουλεύουν για αυτό και δεν γνώρισαν διάδοση στις εφαρμογές DOS (άντε να τα έβρισκες σε κανένα batch και αν..)

Δημοσ.

Χμ. Δοκίμασα το:

 

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

int main(int argc, char *argv[])
{
 gotoxy(20,10);
 printf("abcdef");
 return 0;
}

 

σε Dev-C++ (C - console application) και μου βγαζει

 

[Linker error] undefined reference to `gotoxy'

ld returned 1 exit status

[textcoor.exe] Error 1

Δημοσ.

Όπως σου είπα και στο προηγούμενο μήνυμα, κάθε κατασκευαστής compiler υλοποιεί (αν υλοποιεί μάλιστα..) αυτές τις εντολές λίγο - πολύ όπως θέλει, με όποια ονομασία θέλει, ότι παραμέτρους κρίνει αυτός κτλ.

 

Παραπάνω, σου έδωσα την υλοποίηση αυτών των εντολών για τους compilers της CodeGear/Borland καθώς κάποτε, επί εποχής DOS, τις ακολουθούσαν αρκετοί compilers άλλων κατασκευαστών, προφανώς όμως η Dev-C++ δεν κάνει κάτι τέτοιο, οπότε δεδομένου ότι δεν δουλεύω τον compiler της δεν μπορώ να σε καθ-οδηγήσω περαιτέρω επ' αυτού :( εκτός και αν γυρίσεις σε Console API εντολές.

 

Υ.Γ.

Για περισσότερα σχετικά με το γιατί δεν υπάρχουν αυτές οι Borland εντολές στο conio.h της Dev-C++ δες αυτό το faq: http://aditsu.freeunixhost.com/dev-cpp-faq.html#conio

Επίσης εδώ http://www14.brinkster.com/aditsu/console/ από link του παραπάνω faq, παρέχεται ένα conio.h για την Dev-C++ που λέει πως υλοποιεί αυτές τις Borland εντολές, το πως θα το βρεις εσύ (ελπίζω να σε καλύπτει).

 

Καλή τύχη!

Δημοσ.
Χμ. Δοκίμασα το:

 

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

int main(int argc, char *argv[])
{
 gotoxy(20,10);
 printf("abcdef");
 return 0;
}

 

σε Dev-C++ (C - console application) και μου βγαζει

 

[Linker error] undefined reference to `gotoxy'

ld returned 1 exit status

[textcoor.exe] Error 1

#include <windows.h>

Αρχειοθετημένο

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

  • Δημιουργία νέου...