Mais qu'est ce qui ne va pas dans ce code ci ?
Quelqu'un pourrait m'expliquer ou proposer un exemple en 3 lignes maximum ?Code:
1
2
3
4
5
6
7
8
9 #include <stdio.h> #include <curses.h> main() { char c; c=getch(); printf("\n %c",c); }
Version imprimable
Mais qu'est ce qui ne va pas dans ce code ci ?
Quelqu'un pourrait m'expliquer ou proposer un exemple en 3 lignes maximum ?Code:
1
2
3
4
5
6
7
8
9 #include <stdio.h> #include <curses.h> main() { char c; c=getch(); printf("\n %c",c); }
Mais plutôt getchar a la place de getch() tu programme sous quel système d'exploitation?Citation:
Envoyé par zulul
oops j'ai pas rafraichi avant... linux
le getchar c'est pas une bonne idée, parceque je ne veux pas de "return". Seulement un appui sur la touche...
Alors met int main (void) au debut de ton prog.Citation:
Envoyé par zulul
Voilà normalement ce programme devrait marcher.Code:
1
2
3
4
5
6
7
8
9
10
11
12 #include <stdio.h> #include <ncurses.h> int main (void) { char c; c=getch(); printf ("\n%c",c); return (0); }
merci mais ça a pas trop l'air de marcher sous gcc, je retourne sur windoze ;)
Il faudrait être plus explicite. Est-ce que cela ne marche pas où ca ne répond pas a ce tu souhaites faire ?Citation:
Envoyé par zulul
Sinon dis clairement ce qui ne marche. A savoir si il s'agit d'une erreur de compilation avec gcc ou alors autre chose.
bonne nuit,
Ok, mais quel rapport ?Citation:
Envoyé par benjiprog
Avec Dev-C++, il n'y a aucun problème parceque j'utilise la librairie la plus drôle de l'univers, à savoir conio.h mais quend je remonte sous linux et son gcc avec ncurses.h ou curses.h, peu importe en fait, ça me ressort toujours ça:
pour la compile je fais :Code:
1
2
3
4 /tmp/ccyoc9HA.o(.text+0x21): In function `main': test.c: undefined reference to `stdscr' /tmp/ccyoc9HA.o(.text+0x26):test.c: undefined reference to `wgetch'
C'est fatiguant à la fin et le man getch() n'apporte pratiquement aucune explication, je comprends pourquoi microsoft à perçé sur le marché, parcequ'on perd moins de temps en futilité. Avec linux, c'est toujours les années 60 :lol:Code:
1
2 gcc [f.c] -o -Icurses [prg]
<Hors-sujet>Citation:
Envoyé par zulul
C'est pas -I, mais -l (L minuscule comme 'library')..
</>
<HS>J'aurais dans ton cas plutot parler de rigueur que de "futilité" :) </HS>Citation:
Envoyé par zulul
Salut,
Que j'utilise ncurses ou curses avec ce script :
j'ai maintenant un autre message d'erreur à la compile, avec -lncurses: # no newline at end of file // ce qui compile mais donne "segmentation fault" à l'execCode:
1
2
3
4
5
6
7
8
9 #include "stdio.h" #include "curses.h" void main() { char c; c=getch(); printf(" \n %c",c); }
Qu'est ce que cela signifie ?
Ca veut dire que tu n'as pas installé le package (n)curses-dev...
--
Jedaï
j'ai trouvé comment ça marche mais ça utilise la fenetre curses... ce n'est toujours pas ce que je veux et on tire en ralonge pour un truc si simple, ce n'est pas possible d'en arriver là ...
Quelqu'un a une alternative sans passer par le getchar ? Et sans passer par là :http://c.developpez.com/faq/c/?page=...CREEN_mode_rawCode:
1
2
3
4
5
6
7
8
9
10
11
12
13 #include "stdio.h" #include "ncurses.h" void main() { initscr(); noecho(); char c; c=getch(); printw("\n %c",c); getch(); endwin(); }
Code:
1
2
3
4
5
6
7
8
9
10 #include<stdio.h> #include<conio.h> int main(void) { char c; c=getch (); printf("%c", c); return 0; }
LoL le dépoussiérage de post...
A mon avis, zulul a trouvé la solution à son problème au cours de... ces 5 dernières années. :lol:
Ainsi qu'il a compris que:
- les man pages étaient rébarbatives au début mais en réalité extrêmement bien structurée et pratiques si bien qu'il ne veut plus que ça...
(sous windows il est d'ailleurs maintenant obligé de googler "man <cmd>" pour avoir une information rapide, claire, et concise)
- la solution proposée là -> http://c.developpez.com/faq/?page=cl...CREEN_mode_raw était une des solutions possibles, pas plus mauvaise qu'une autre, et qu'il peut toujours la mettre dans un conio.c si c'est tout ce qu'il manque à son bonheur
- que Curses est une lib magnifique
- "linux et son GCC" sont forcément la référence, les manières de faire du C étant liées au fonctionnement de Unix
(sans vouloir rentrer dans le troll bien sûr, mais ça me semblait important à préciser étant donné que ce sujet doit être beaucoup visionné par des débutants... inutile de les encourager à trouver que "les man pages c'est nuuuuul")
D'une manière générale, en dehors de curses, tu lis « l'entrée standard » de ton processus. Ça ne signifie pas que celle-ci est directement reliée au clavier.
Dans le cas présent, tu travailles dans un « terminal ». Il s'agit d'un terminal virtuel − probablement un x-term − mais ceux-ci sont à l'origine censés se trouver au bout d'une ligne et être bufferisés par un pilote sous-jacent. En mode canonique, entre autre chose, les données sont disponibles ligne par ligne, ce qui permet d'une part à l'utilisateur de corriger ses données avant de les envoyer et, d'autre part, de réduire notablement l'overhead que cela engendre au niveau du système.
Autrement dit : si tu veux recevoir les caractères un par un pour pouvoir faire un « appui sur une touche », il faut d'abord demander au terminal de te les envoyer. Mais ça, bien sûr, c'est de la programmation système. Ce n'est pas spécifique au langage C.
Si tu n'as pas envie de t'ennuyer à gérer ça dans le programme C, fais « stty -icanon » dans le terminal où tu travailles. Sinon, regardes du côté de termios.