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++
Re tout le monde. J´ai encore une question ( a bon?). Qu´est ce qui ne vas pas dans ce code?
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.
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"?
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>
voici comment le compilo va y comprendre :
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
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 ![]()
bjr tout le monde, je suis en train de creer une calculatrice et voici un bout de mon code:
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...
si on pouvait aussi m´expliquer coment faire une soustraction ça serait super...
:recherhcer: :recherhcer:
![]()
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 ![]()
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. ![]()
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 ! !
Oki merci. Sinon qu´est ce qui manque dans ce code? Il peut se compiler mais il plante à chaque lancement.
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;
}
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´;
Ah tu veux dire qu´il faut que je fasse
pointeur[6] = ´\0´;
Apres avoir mit toutes les lettres?
oui
Euhmmm, ça marche toujours pas...
lol, j´avais pas vu :
il faut mettre :
printf(" %s\n", pointeur);
sans l´étoile.
Oki merci maintenant ça marche.
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 ![]()
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 ;
}
oui :
if ( choix=1)
remplace par :
if ( choix==1)
pareil pour les autres
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
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...