Newbie : 2 questions (structures et getch() ) : Merci :) - C++ - Programmation
Marsh Posté le 09-04-2003 à 00:19:28
dionaea a écrit : salut tlm, |
Marsh Posté le 09-04-2003 à 00:41:46
Voila un exemple (volontairement non fini):
Code :
|
Edit: si tu as des questions, on se fera un plaisir d'y repondre. Je pense que ce code est suffisament bien écrit pour que tu puisses le finir pour t'entrainer.
Marsh Posté le 09-04-2003 à 07:34:28
Merci, je vais voir ça, mais il ne me semble pas avoir vu "malloc" pour les structures...
Merci pour cette réponse !
Marsh Posté le 09-04-2003 à 11:02:55
dionaea a écrit : Merci, je vais voir ça, mais il ne me semble pas avoir vu "malloc" pour les structures... |
ben si tu as un char*, faut forcément un malloc/calloc derriere pour allouer la mémoire qu'il faut...
Marsh Posté le 09-04-2003 à 11:31:57
ToxicAvenger a écrit : |
oue sinon c est segv direct
Marsh Posté le 09-04-2003 à 13:04:13
ToxicAvenger a écrit :
|
pas de fflush(stdin) !
et rewind(stdin), tu peux donner le sens que ca a sur des entrées au clavier, stp ?
Marsh Posté le 09-04-2003 à 13:22:53
theShOcKwAvE a écrit : |
Oui, mais ...
La fonction fflush() a un comportement défini uniquement sur les flux ouverts en écriture tels que stdout. Il est possible que sur votre système, appliquer cette fonction à stdin soit possible, mais c'est alors une extension non standard. Le comportement est indéterminé, et imprévisible. |
Etant donné qu'il est sous windows, et qu'il programme une application console, ca pourra lui éviter des prises de tetes.
Sinon, effcetivement, il ne faut pas en faire, mais je n'avais pas envie de lui prendre la tête avec ca.
C'est discutable, on en convient, mais c'est un parti pris de ma part.
De plus, etant donné que j'ai mis cette fonction à part, c'est pour qu'il la remplace par un truc plus *standard* en fonction de son systeme. De toutes facons, au mieux ca sera posix, au pire ca sera dépendant de son os et/ou de son compilo.
Marsh Posté le 09-04-2003 à 18:50:46
Bon ça y est j'ai passé mon controle
C'etait pas bien dur (on commence le C) mais il nous a posé un exo dont voici l'enoncé:
"Ecrire un prg qui demande a l'utilisateur de rentrer 10 entiers. Les entiers seront stockés dans une zone memoire allouée dynamiquement (fonction malloc()) pouvant contenir 10 entiers. A l'issue de la saisie, le prg affiche les 10 valeurs."
J'y ai touché un peu mais je me souvenais pas avoir vu malloc()...
Pourriez m'éclairer?
Marsh Posté le 09-04-2003 à 18:55:54
dionaea a écrit : Bon ça y est j'ai passé mon controle |
y'en a pour 5 minutes a faire, a tout de suite
Marsh Posté le 09-04-2003 à 19:17:26
Code :
|
y'a une couille dans le potage
je regarde ca.
Marsh Posté le 09-04-2003 à 19:26:08
dionaea a écrit : |
ben en taille, c court. Evidemment si tu n'as pas vu malloc et les pointeurs. La par exemple, ca doit couiller au niveau de l'arithmétique des pointeurs...
Edit: memset c'est pas obligatoire, ca permet de mettre un bout de mémoire à une certaine valeure (dans mon cas: à 0)
Marsh Posté le 09-04-2003 à 19:27:19
ToxicAvenger a écrit :
|
Marsh Posté le 09-04-2003 à 19:31:30
tomate77: non c pas ca... (enfin aussi mais ca vient pas de la)
c'est au niveau de piSaisie++; et piSaisie--;
Marsh Posté le 09-04-2003 à 19:36:28
Code :
|
Voila.
Edit: voila, ca ca marche !
Marsh Posté le 09-04-2003 à 22:59:46
pourquoi tu fais pas directement un calloc, si c'est pour faire un memset à 0 .....
Marsh Posté le 09-04-2003 à 23:06:30
De plus, le While en connaissant le nombre d'itérations, je ne suis pas sur que ca plaise trop aux profs ...
un bon 'for' leur ferait sans doute plus plaisir ....
Marsh Posté le 09-04-2003 à 23:58:13
theShOcKwAvE a écrit : pourquoi tu fais pas directement un calloc, si c'est pour faire un memset à 0 ..... |
et pourquoi pas ?
Marsh Posté le 09-04-2003 à 23:58:32
theShOcKwAvE a écrit : De plus, le While en connaissant le nombre d'itérations, je ne suis pas sur que ca plaise trop aux profs ... |
tous les chemins mènent à Rome.
Marsh Posté le 10-04-2003 à 09:22:04
ToxicAvenger a écrit : |
un for ou un while, on s en tappe du moment ke ca marche
Marsh Posté le 10-04-2003 à 10:05:37
Code :
|
ca me semble un peu plus simple
Marsh Posté le 10-04-2003 à 10:07:55
polo021 a écrit :
|
toutafait
Marsh Posté le 10-04-2003 à 10:12:19
polo021 a écrit :
|
ouais, sauf que c'est pas du C mais du C++ ca...
Et en plus ton free plante (normal vu comment tu manipule ca...)
Marsh Posté le 10-04-2003 à 10:15:22
ToxicAvenger a écrit : |
ps : ON NE CASTE JAMAIS MALLOC
Marsh Posté le 10-04-2003 à 10:18:36
tomate77 a écrit : |
oui je suis d'accord mais pourquoi me quoter moi ? moi je ne caste pas malloc, c'est polo021 qui fait ca...
Edit: c'est du C++ à cause de sa déclaration int i dans son for. En C++ c'est autorisé, pas en C.
Marsh Posté le 10-04-2003 à 10:22:41
ToxicAvenger a écrit : |
je t ai quote pour :
- c est du C++, alors juste pour une declaration de int
- le free, pk il marcherai po, il n a pas deplace les pointeur
voilou
Marsh Posté le 10-04-2003 à 10:24:08
tomate77 a écrit : |
- ben ca suffit pour pas compiler avec un compilo de C
- chez moi ca plante
Marsh Posté le 10-04-2003 à 10:25:20
ToxicAvenger a écrit : |
-ok
-tu peux faire un gdb et me dire ou ca plante ?
Marsh Posté le 10-04-2003 à 10:30:43
tomate77 a écrit : |
je suis sous windows, alors gdb...
ca plante a la fin, apres l'affichage, attends je regarde sous le debug.
Marsh Posté le 10-04-2003 à 10:32:22
ToxicAvenger a écrit : |
ok
mais deja j aurai fais un malloc(11) et pas 10
edit malloc(11 * sizeof (int)) !!!
Marsh Posté le 10-04-2003 à 10:38:13
tomate77 a écrit : |
Bah moi je fais un malloc 10 et ca marche...
Code :
|
Marsh Posté le 10-04-2003 à 10:39:45
ToxicAvenger a écrit :
|
bah ca marche alors ?????
Marsh Posté le 10-04-2003 à 10:47:43
vous pourriez me dire pourquoi c'est pas bien les casting sur malloc?
et le sizeof (int) si je le mets pas c'est a cause du casting (il en deduit lui meme que c'est de l'entier).
PS : je n'ai pas teste mais simplement tape ca comme ca en 2 minutes mais je vois pas pourquoi le free planterai???
Marsh Posté le 10-04-2003 à 10:50:57
tomate77 a écrit : |
pourquoi un malloc 11? on manipule pas des caracteres ici!
Marsh Posté le 10-04-2003 à 10:53:02
ToxicAvenger a écrit : |
tu veux dire que :
int *tab = (int*)malloc(10); => plante au free
et que :
int *tab = malloc(10*sizeof(int)); => ne plante pas au free?
c'est quoi ce bordel?
Marsh Posté le 10-04-2003 à 10:57:35
polo021 a écrit : |
le bordel c'est qu'un int ca fait pas 1 octet...
sizeof(int) != 1
Edit: du moins la norme dit que ca depent de ta plateforme. Le seul truc que ta norme te certifie, c'est que sizeof(char) == 1 quelque soit ta plateforme.
Marsh Posté le 10-04-2003 à 10:59:01
polo021 a écrit : vous pourriez me dire pourquoi c'est pas bien les casting sur malloc? |
on ne caste jamais malloc car ca renvoie un void *
et 10 ca marche
Marsh Posté le 08-04-2003 à 23:42:53
salut tlm,
je commence l'apprentissage du C est j'ai petit controle demain (je sais c'est ptet un peu tard ) mais j'ai 2 questions:
1)getch() en fin de programme sert simplement a faire une pause jusqu'a ce que l'utilisateur tape sur une touche? est ce different de getchar()? (la pause ne fonctionne qu'avec getch()..)
2) Pour la définition d'un structure, du genre
struct personne { char nom[30];
char prenom[20];
float heures[31];
};
Si j'ai bien compris le [30] derriere "nom" signifie que mon nom poura faire au max 30 caractères? Mon prof m'a parlé du fait qu'on pouvait definir la structure en faisant comme suit (ce qui permettait d'avoir un nombre illimité de caractere et de ne pas manger de la memoire pour rien):
struct personne { char *nom;
char *prenom;
float heures[31];
};
Mais comment je rentre une valeur pour personne.nom ensuite? (j'ai du mal avec les pointeurs
Merci pour vos réponses !
Message édité par dionaea le 08-04-2003 à 23:52:48