CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

J´aide les personne en C/C++

JeanYvesYves
JeanYvesYves
Niveau 10
29 juillet 2004 à 00:38:27

mon programme de canyon n´a pas été optimisé a mort, et il est inflexible : j´ai entré la résolution 1024*768 32bpp en dur
et y´a des optimisations mal faites

essaie de régler le clipping avec pageup et pagedown : regarde le fichier " lisezmoi"

printf ou cout
-> y´a pas de mieux, les 2 reviennent au meme
l´un est du C, l´autre du C++

overkill666
overkill666
Niveau 8
29 juillet 2004 à 00:56:51

Re tout le monde. J´ai encore une question ( a bon?). Qu´est ce qui ne vas pas dans ce code?

  1. include < stdio.h>
  2. include < stdlib.h>

int main()
{
char *pointeur;

if((pointeur = ( char *)malloc(sizeof(7*char))) == NULL)
{
printf(" Impossible d´allouer la memoire.\n");
}

*pointeur = Robert;

printf(" %s\n", *pointeur);

free(pointeur);

system("PAUSE");
return 0;
}

Il me met parse error ( ligne 8) seulement je ne vois pas vraiment l´erreur.
J´interprète mon code de cette façon :
1°.Je déclare un pointeur ( pouvant pointer sur une donnée de type char).

2°. J´alloue une zone de mémoire de " 7 * int" qui renverra un pointeur de type char qui sera " pointeur". Si il est impossible d´allouer la mémoire, le programme affichera " impossible d´allouer la mémoire."

3°. " *pointeur = Robert;" C´est un point qui me cause pas mal de problème. Tout à l´heure JY² tu
as fait ça :
t[0]= ´R´; ce qui attribue donc R à la prmière case du tableau pointé par t, c´est ça?
Mais si je veux remplir tout le tableau d´un coup, alors est ce que " *pointeur = Robert" convient ? ( en fait je sais que non puisque Dev-C++ me signale une fonction non déclarée, seulement je ne sais pas comment faire.) J´avais pensé à " *pointeur = {R, o, b, e, r, t};" .

4°. fonction printf, simple vérification pour voir si mon programme fais ce que j´ai programmé.

5°. Les 3 dernières lignes, fin du programme. J´ai aucun problème la dessus.

J´espère que ça vous aidera à me répondre et à me signaler là où ca coince.

overkill666
overkill666
Niveau 8
29 juillet 2004 à 00:58:28

Ah j´avais oublié free. Et j´ai d´ailleurs une question dessus. " free(pointeur)" libère tout ce qui à été alloué en mémoire et qui était pointé par " pointeur"?

JeanYvesYves
JeanYvesYves
Niveau 10
29 juillet 2004 à 09:47:10

if((pointeur = ( char *)malloc(sizeof(7*char))) == NULL)
-->

déja sizeof :
ne met pas sizeof(7*char), mais : sizeof(char)*7
faut pas mélanger :)
ensuite, certains vont hurler, mais ne fais pas de test a chaque malloc : fait juste :

pointeur=(char*)malloc(sizeof(char)*7);

il est tres peu probable que ce soit refusé.
et puis si tu veux faire le puriste, dans ce cas :
- tu fais une fonction malloc_test qui te renvoie une excpetion si ça foire
- tu utilises < assert.h>

  • pointeur = Robert; ---> FAUX

voici comment le compilo va y comprendre :

  • pointeur est un char.

il va chercher une variables qui s´appelle Robert.
Pour cette ligne, il va donc te dire :
. Robert undeclared.

dans la mesure ou pointeur est un tableau, aucune autre solution que de copier lettre par lettre.
Cependant, des gens ont fait ça pour toi :)

  1. include < string.h>

strcpy(pointeur,"Robert");
N´oublie pas les " "

N´oublie pas non plus d´allouer suffisament :
" Robert" fait 6 lettres, tu as le \0 terminal, ça fait une 7e " lettre" donc C tout bon :))

free(pointeur) -> en effet, ça libere la zone mémoire. Donc dans ce cas, ça te libere bien tes 7 octets alloués :)

Mordorik
Mordorik
Niveau 10
29 juillet 2004 à 12:20:01

bjr tout le monde, je suis en train de creer une calculatrice et voici un bout de mon code:

  1. include < iostream>
  2. include < string>

int main()
{
string nom [50];
int a; / /premier nombre
int b; / /second nombre
int c; / /3eme nombre
int choix;
cout < < " Bienvenue sur la calculatrice de M. Avice, createur de ce programme..." < < endl;
cout < < " Que voulez vous faire ? " < < endl;
cout < < " 1) Addition" < < endl;
cout < < " 2) Multiplication" < < endl;
cout < < " 3) Division" < < endl;
cout < < " " < < endl;
cin > > choix;
if ( choix==1)
{
cout < < " Veuillez entrer le premier nombre..." < < endl;
cin > > a
sauf que arrivé à ette ligne ensuite je vais faire pour le seond nombre mais je ne sais pas comment afficher le resultat
est ce qu´on peut faire ça ? :
cout < < c=a+b < < endl;
merci de me repondre au plus vite, je n´ai pas envie de m´attarder là dessus...

Mordorik
Mordorik
Niveau 10
29 juillet 2004 à 12:52:57

si on pouvait aussi m´expliquer coment faire une soustraction ça serait super...

:recherhcer: :recherhcer: :rechercher: :rechercher:

JeanYvesYves
JeanYvesYves
Niveau 10
29 juillet 2004 à 14:11:55

tu ecris :

c=a+b;

et ensuite :

cout < < c < < endl;
( non pas que ce que tu écrit ne marche pas, mais C plus clair comme ça

et apres, tu peux faire :

c=a-b;
c=a*b;
c=a/b;
c=a%b;

c´est toi qui voit :)

overkill666
overkill666
Niveau 8
29 juillet 2004 à 14:42:57

Oki merci JY². Si j´ai fait un test c´est pour m´exercer ( encore) à un point du cours que je lis.
Enfin je n´utiliserai pas les fonctions < assert.h>, < string.h> .
car je ne les connais pas et je ne préfère pas utiliser des fonctions que je n´ai pas vu. Donc je vais faire lettre par lettre. :-)

JeanYvesYves
JeanYvesYves
Niveau 10
29 juillet 2004 à 14:46:25

ok :) ça t´exercera avant de connaitre :)
j´ai qq tutos sur la manipulation des chaines qui sont prets a etre uploadés, ça devrait etre fait d´ici pas longtemps

Si tu veux passer en manuel ( et ça t´exercera) pour copier les chaines, n´oublie de copier également le caractere terminal ´\0´
sinon, gare aux surprises ! !

overkill666
overkill666
Niveau 8
29 juillet 2004 à 14:57:26

Oki merci. Sinon qu´est ce qui manque dans ce code? Il peut se compiler mais il plante à chaque lancement.

  1. include < stdio.h>
  2. include < stdlib.h>

int main()
{
char *pointeur;

if((pointeur = ( char *)malloc(sizeof(char)*7)) == NULL)
{
printf(" Impossible d´allouer la memoire.\n");
}

pointeur[0] = ´R´;
pointeur[1] = ´o´;
pointeur[2] = ´b´;
pointeur[3] = ´e´;
pointeur[4] = ´r´;
pointeur[5] = ´t´;

printf(" %s\n", *pointeur);

free(pointeur);

system("PAUSE");
return 0;
}

JeanYvesYves
JeanYvesYves
Niveau 10
29 juillet 2004 à 14:59:22

pan ! :) c´est exactement ce que je te disais dans le message d´avant

une chaine de caracetere, il FAUT lui ajouter un caractere terminal a la fin pour lui dire " elle est finie"
sinon, l´ordi, quand il lit ta chaine, ( avec le printf, ou autre chose) il continue a avancer en mémoire jusqu´a . .. planter ! ! ( ou jusqu´a trouver un code \0 par hasard)

alors rajoute, juste avant ton printf :

pointeur[6] = ´\0´;

overkill666
overkill666
Niveau 8
29 juillet 2004 à 15:00:49

Ah tu veux dire qu´il faut que je fasse
pointeur[6] = ´\0´;

Apres avoir mit toutes les lettres?

JeanYvesYves
JeanYvesYves
Niveau 10
29 juillet 2004 à 15:01:29

oui

overkill666
overkill666
Niveau 8
29 juillet 2004 à 15:03:48

Euhmmm, ça marche toujours pas...

JeanYvesYves
JeanYvesYves
Niveau 10
29 juillet 2004 à 15:06:13

lol, j´avais pas vu :

il faut mettre :
printf(" %s\n", pointeur);

sans l´étoile.

overkill666
overkill666
Niveau 8
29 juillet 2004 à 15:13:02

Oki merci maintenant ça marche.

Mordorik
Mordorik
Niveau 10
29 juillet 2004 à 17:19:31

super merci pour ton conseils JY² !
mais j´ai trouvé un moyan bien plus simple
=> cout < < " Le resultat est " < < a/b < < endl;
par contre il y a un probleme ds mon code, je veux que celui qui l´utilise choisisse parmi plusieurs options ( multiplication, division, addition etc...) et qu´une fois qu´il tape entree, l´ordi lui demande un premier nombre, puis un second, pui il donne le resultat, et enfin il demande si l´utilisateur veut recommencer le programme. Le probleme est que le programme demande des chiffres pour l´addition, puis la soustraction, puis la multiplication, et enfin la division. Le probleme est que je ne veux pas qu´il fasse ça. Voila le code :d)

  1. include < iostream>

int main()
{
int choix2 = 1;//choix de recommencer ou non
int a; / /premier nombre
int b; / /second nombre
int c; / /resultat
int choix;//choix pour choisir operation
while ( choix2 == 1)
{
cout < < " Bienvenue sur la calculatrice de M. Avice, createur de ce programme..." < < endl;
cout < < " Que voulez vous faire ? " < < endl;
cout < < " 1) Addition" < < endl;
cout < < " 2) Soustraction" < < endl;
cout < < " 3) Multiplication" < < endl;
cout < < " 4) Division" < < endl;
cout < < " " < < endl;
cin > > choix;
if ( choix==1)
{
cout < < " Veuillez entrer le premier nombre..." < < endl;
cin > > a;
cout < < " Veuillez entrer le second nombre..." < < endl;
cin > > b;
cout < < " Le resultat est " < < a+b < < endl;
}
if ( choix==2)
{
cout < < " Veuillez entrer le premier nombre..." < < endl;
cin > > a;
cout < < " Veuillez entrer le second nombre..." < < endl;
cin > > b;
cout < < " Le resultat est " < < a-b < < endl;
}
if ( choix=3)
{
cout < < " Veuillez entrer le premier nombre..." < < endl;
cin > > a;
cout < < " Veuillez entrer le second nombre..." < < endl;
cin > > b;
cout < < " Le resultat est " < < a*b < < endl;
}
if ( choix=4)
{
cout < < " Veuillez entrer le premier nombre..." < < endl;
cin > > a;
cout < < " Veuillez entrer le second nombre..." < < endl;
cin > > b;
cout < < " Le resultat est " < < a/b < < endl;
}
cout < < " Voulez vous recommencer le programme ? " < < endl;
cout < < " 1) Oui" < < endl;
cout < < " 2) Non" < < endl;
cin > > choix2;
}
cin.get();
cin.get();
return 0 ;
}

JeanYvesYves
JeanYvesYves
Niveau 10
29 juillet 2004 à 17:24:30

oui :

if ( choix=1)

remplace par :

if ( choix==1)

pareil pour les autres

Ruffi
Ruffi
Niveau 9
29 juillet 2004 à 17:28:32

Utilise switch :

switch(variable){
case cas_1 :
fait_kelkechose();
break;
case cas_2 :
fait_autre_chose();
break;
default:
indique_mauvais_choix();
}

C´est plus propre

Mordorik
Mordorik
Niveau 10
29 juillet 2004 à 17:28:38

super merci ça fonctionne enfin même si je n´ai pas vraiement compris l´histoire des " =" et des " ==" et pourquoi ça me donnait ce resultat là... pourrais tu m´expliquer ?
super merci. Quelque chose de chi*** avec le C++ c´est que même si ton code est bon, et bah il peut ne pas fonctionner...

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware