Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1585 connectés 

  FORUM HardWare.fr
  Programmation
  C

  mini question ! Est ce que ceci est correct?

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

mini question ! Est ce que ceci est correct?

n°1056326
fullnight
Posté le 22-04-2005 à 12:51:26  profilanswer
 

Code :
  1. #include "stdio.h"
  2. int main()
  3. {
  4. short v[20][20][20];
  5. short i=0,j=0,k=0;
  6. printf("entrez les 3\n" );
  7. scanf("%hd",&v[i][j][k]);
  8. return 0;
  9. }


 
je compte juste remplacer les trois 20 par des nbres entrés par l'utilisateur.
 
est ce que mon code permet-il de le faire?

mood
Publicité
Posté le 22-04-2005 à 12:51:26  profilanswer
 

n°1056347
KangOl
Profil : pointeur
Posté le 22-04-2005 à 13:06:21  profilanswer
 

faudrait alouer la memoire toi meme...


---------------
Nos estans firs di nosse pitite patreye...
n°1056350
fullnight
Posté le 22-04-2005 à 13:10:13  profilanswer
 

je voulais juste un oui ou un non
 
tu as l'art de m'embrouiller toi ;-)
 
tu veux que je fasse un calloc c ca?
pas de prob mais je revois chapitre par chapitre donc je suis pas encore censé employer calloc (on a vu calloc après ca  )
 
donc la réponse  
est oui ou non??est ce que ceci est correct


Message édité par fullnight le 22-04-2005 à 13:11:15
n°1056354
KangOl
Profil : pointeur
Posté le 22-04-2005 à 13:14:43  profilanswer
 

question du titre : oui
question du message : non


---------------
Nos estans firs di nosse pitite patreye...
n°1056404
fullnight
Posté le 22-04-2005 à 13:30:23  profilanswer
 

ok merci
 
et cmt tu veux allouer?


Message édité par fullnight le 22-04-2005 à 13:30:49
n°1056479
Elmoricq
Modérateur
Posté le 22-04-2005 à 13:49:44  profilanswer
 

je compte juste remplacer les trois 20 par des nbres entrés par l'utilisateur.


 
Je voudrais être sûr de comprendre : tu voudrais que la taille de ton tableau varie en fonction du résultat de scanf ?

n°1056485
fullnight
Posté le 22-04-2005 à 13:51:45  profilanswer
 

Elmoricq a écrit :

je compte juste remplacer les trois 20 par des nbres entrés par l'utilisateur.


 
Je voudrais être sûr de comprendre : tu voudrais que la taille de ton tableau varie en fonction du résultat de scanf ?


 
c'est exact.

n°1056491
Elmoricq
Modérateur
Posté le 22-04-2005 à 13:53:11  profilanswer
 

Alors tu ne peux pas faire comme ça, il faut effectivement allouer ton tableau dynamiquement.
 
Avec, par exemple, calloc.

n°1056505
fullnight
Posté le 22-04-2005 à 14:01:32  profilanswer
 

ok !
 
c juste ke j'étudiais le chapitre sur les vecteur a dimension multiple.
 
le callo c après

n°1056538
Rak111
Posté le 22-04-2005 à 14:15:50  profilanswer
 

Si tu veux pas utiliser de calloc, tu peux faire comme ca :  
 
a+
 

Code :
  1. #include "stdio.h"
  2. int main()
  3. {
  4.    short i=0,j=0,k=0;
  5.    printf("entrez les 3\n" );
  6.    scanf("%hd",&i);
  7.    scanf("%hd",&j);
  8.    scanf("%hd",&k);
  9.    short v[i][j][k];
  10.  
  11.    return 0;
  12. }


---------------
-= RAK =-
mood
Publicité
Posté le 22-04-2005 à 14:15:50  profilanswer
 

n°1056546
KangOl
Profil : pointeur
Posté le 22-04-2005 à 14:20:02  profilanswer
 

tu as essayer de compiler ce code ??
j'ai de gros doute !


---------------
Nos estans firs di nosse pitite patreye...
n°1056556
Rak111
Posté le 22-04-2005 à 14:23:02  profilanswer
 

oui ca marche bien mais tout depend de ton compilateur c'est vrai


---------------
-= RAK =-
n°1056560
fullnight
Posté le 22-04-2005 à 14:24:28  profilanswer
 

ce code contient 9 erreurs mon pote !
 
 
il a peur que tes affectations restent à 0!
alors il panique pour le tableau et pouf voila quoi!


Message édité par fullnight le 22-04-2005 à 14:25:01
n°1056570
Elmoricq
Modérateur
Posté le 22-04-2005 à 14:27:41  profilanswer
 

KangOl a écrit :

tu as essayer de compiler ce code ??
j'ai de gros doute !


 
J'ai eu un doute aussi, et je viens de le compiler (gcc version 2.95.2 sous Solaris).
 
Ca marche, pas un seul warning. Je viens d'apprendre un truc.  
Par contre, je suis pas sûr que ce soit conforme aux normes. Je vais aller vérifier ça.
 
Sinon, sur ce genre de code vaut quand même mieux coller des gardes-fous. ;)


Message édité par Elmoricq le 22-04-2005 à 14:32:02
n°1056619
farfouille
Posté le 22-04-2005 à 14:41:28  profilanswer
 

Code :
  1. #include "stdio.h"
  2. int main()
  3. {
  4.    short i=0,j=0,k=0;
  5.    printf("entrez les 3\n" );
  6.    scanf("%hd",&i);
  7.    scanf("%hd",&j);
  8.    scanf("%hd",&k);
  9.    short v[i][j][k];
  10.  
  11.    return 0;
  12. }


 
Ben déjà c'est bizarre qu'il ne dise rien, car en C, tu ne peux déclarer des variables dans une fonction qu'au début de la fonction...
D'autre part, il n'est possible de déclarer un tableau de valeurs qu'avec des tailles (dimensions) CONSTANTES.
 
Donc revoir un peu le code et l'environnement de développement.
 
 
@fullnight> pour arriver à tes fins, tu dois t'intéresser aux notions suivantes : les pointeurs, et les allocations dynamiques de mémoire.


Message édité par farfouille le 22-04-2005 à 14:45:30
n°1056628
Elmoricq
Modérateur
Posté le 22-04-2005 à 14:44:39  profilanswer
 

farfouille a écrit :

Ben déjà c'est bizarre qu'il ne dise rien, car en C, tu ne peux déclarer des variables qu'au début des fonctions...
D'autre part, il est impossible de déclarer un tableau de valeurs sans des dimensions CONSTANTES.
 
Donc revoyez un peu votre code et votre environnement de développement.


 
Eh oui, c'est ce que j'aurais dit il y a dix minutes aussi.
Mais depuis que gcc le compile, même avec le flag -ansi, je doute.
P'têt un truc qui a été ajouté dans la norme ANSI ?
 
Je suis en train de chercher les specs pour vérification.

n°1056667
push
/dev/random
Posté le 22-04-2005 à 15:05:00  profilanswer
 

-ansi -pedantic
 
sinon voir C99

n°1056674
Elmoricq
Modérateur
Posté le 22-04-2005 à 15:06:23  profilanswer
 

Ok, j'ai trouvé.
 
Ca date des specs C99 (2000~2001, donc pas si nouveau que ça), et il s'agit des Variable-Length Array (VLA)
 

Citation :


# Variable length arrays(VLA): These are arrays whose size is determined at runtime.  
VLA is a part of C99 standards (ISO/IEC 9899:1999). VLA allows the integer expression delimited by [ and ] in an array declarator to be a variable expression or *. An identifier whose declaration has such an array declarator is a variably modified (VM) type.


 
Bon, va falloir que je plonge dans ces specs pour découvrir toutes les nouveautés que je connaissais pas :)
 
 
EDIT : ah tiens, warnings avec -pedantic... pourquoi ? pas encore complètement implémenté ?


Message édité par Elmoricq le 22-04-2005 à 15:10:00
n°1056685
fullnight
Posté le 22-04-2005 à 15:13:01  profilanswer
 

je répète
 
 
9 erreurs avec ton code !!
avec microsoft visual c++ 6.0


Message édité par fullnight le 22-04-2005 à 15:13:17
n°1056693
Elmoricq
Modérateur
Posté le 22-04-2005 à 15:14:28  profilanswer
 

fullnight a écrit :


9 erreurs avec ton code !!
avec microsoft visual c++ 6.0


 
 
Erreurs ou warnings ?
(je connais pas ce compilo)

n°1056705
shurik'n
Posté le 22-04-2005 à 15:19:24  profilanswer
 

Meme si cette methode marche ( a essayer quand meme en -Wall -ansi -pedantic en effet) c est vraiment crade.
 
Le malloc n'est vraiment pas difficile a utiliser et il permet d etre rigoureux dans ses allocations.

n°1056715
Elmoricq
Modérateur
Posté le 22-04-2005 à 15:24:43  profilanswer
 

shurik'n a écrit :

Meme si cette methode marche ( a essayer quand meme en -Wall -ansi -pedantic en effet) c est vraiment crade.


 
Pourquoi "crade" ?
Si c'est utilisé à bon escient, et convenablement commenté, je ne vois pas en quoi c'est plus sale qu'un malloc ?
Reste ensuite à voir, par contre, les temps d'exécution... déjà qu'un malloc c'est long.
 

shurik'n a écrit :

Le malloc n'est vraiment pas difficile a utiliser et il permet d etre rigoureux dans ses allocations.


 
Là-dessus, je suis d'accord (même si beaucoup devraient apprendre le sens du mot "rigueur"... j'ai rencontré de drôles de trucs dans des programmes)
 
 
Mais ça ne répond pas à ma question : pourquoi ça passe avec -ansi, et pas avec -pedantic ? (-Wall passe, c'est le premier truc que j'ai testé après avoir vu que ça compilait :D )


Message édité par Elmoricq le 22-04-2005 à 15:24:56
n°1056718
fullnight
Posté le 22-04-2005 à 15:27:10  profilanswer
 

tu connais pas ce compilo? lol VC++ 6.0
 
c pas de warning que je parle
g clairement écrit 9 erreurs !
 
http://membres.lycos.fr/zonefullnight/dwarf.JPG


Message édité par fullnight le 22-04-2005 à 15:29:42
n°1056722
Elmoricq
Modérateur
Posté le 22-04-2005 à 15:28:28  profilanswer
 

fullnight a écrit :

tu connais pas ce compilo? lol VC++ 6.0


 
Je le connais de nom, mais j'ai jamais bossé dessus.
Pardon de travailler sous Unix.
 
 

fullnight a écrit :

c pas de warning que je parle
g clairement écrit 9 erreurs !


 
Sauf erreur, c'est parce que ton compilateur ne respecte pas les dernières normes ANSI.
Corrigez-moi si je me trompe (je ne le connais pas)
Ceci dit, c'est pas plus mal : ça va te faire travailler les allocations dynamiques, et c'est une notion fondamentale.


Message édité par Elmoricq le 22-04-2005 à 15:29:31
n°1056727
Joel F
Real men use unique_ptr
Posté le 22-04-2005 à 15:30:40  profilanswer
 

malloc bordel :fou: :o [:pingouino]

n°1056728
fullnight
Posté le 22-04-2005 à 15:30:57  profilanswer
 

je n'ai nul besoin de travailler les alloc avec cet exercice.
dans ce chapitre je suis " censé ne connaitre QUE "  
 
comprends tu :)
 
je relis tout mon cours, et c'est justement en " rencontrant ce problème " que découle le chapitre suivant ===> l'allocation dynamique de la mémoire.


Message édité par fullnight le 22-04-2005 à 15:31:30
n°1056730
Joel F
Real men use unique_ptr
Posté le 22-04-2005 à 15:31:19  profilanswer
 

mais c'est quoi ce cours de MERDE o-O

n°1056731
shurik'n
Posté le 22-04-2005 à 15:31:22  profilanswer
 

Elmoricq a écrit :

Pourquoi "crade" ?
Si c'est utilisé à bon escient, et convenablement commenté, je ne vois pas en quoi c'est plus sale qu'un malloc ?
Reste ensuite à voir, par contre, les temps d'exécution... déjà qu'un malloc c'est long.


 
J'avoue que le malloc prend beaucoup plus de temps machine mais il permet de bien savoir ce que l'on fait (j alloue n cases, dans chaques case je defini un pointeur vers m cases que j'alloue etc ...) c est plus hierarchique et plus commentable qu une declaration de 20 tableaux de 20 tableaux de 20 short en une seule fois.

n°1056733
Joel F
Real men use unique_ptr
Posté le 22-04-2005 à 15:32:06  profilanswer
 

shurik'n a écrit :

J'avoue que le malloc prend beaucoup plus de temps machine mais il permet de bien savoir ce que l'on fait (j alloue n cases, dans chaques case je defini un pointeur vers m cases que j'alloue etc ...) c est plus hierarchique et plus commentable qu une declaration de 20 tableaux de 20 tableaux de 20 short en une seule fois.


malloc ne prend pas du temps machien, on n'est plus sur des PDP11 :o 20x20x20x2 -> 15Ko ....

n°1056734
push
/dev/random
Posté le 22-04-2005 à 15:32:13  profilanswer
 

The -ansi option does not cause non-ISO programs to be rejected
gratuitously.  For that, -pedantic is required in addition to -ansi.
 
-pedantic
Issue all the warnings demanded by strict ISO C and ISO C++; reject
all programs that use forbidden extensions, and some other programs
that do not follow ISO C and ISO C++.  For ISO C, follows the ver-
sion of the ISO C standard specified by any -std option used.

 
man gcc  :o


Message édité par push le 22-04-2005 à 15:32:58
n°1056742
shurik'n
Posté le 22-04-2005 à 15:35:46  profilanswer
 

Joel F a écrit :

malloc ne prend pas du temps machien, on n'est plus sur des PDP11 :o 20x20x20x2 -> 15Ko ....


 
Malloc est tres couteux je t assure, on a fait pas mal de tests dessus , il est conseillé de l eviter des que cela est possible (quand on connait la taille a allouer et qu on ne souhaite pas y toucher apres)

n°1056746
Joel F
Real men use unique_ptr
Posté le 22-04-2005 à 15:36:23  profilanswer
 

o_O heu la je dis : nah ...

n°1056747
Elmoricq
Modérateur
Posté le 22-04-2005 à 15:36:33  profilanswer
 

shurik'n a écrit :

J'avoue que le malloc prend beaucoup plus de temps machine mais il permet de bien savoir ce que l'on fait (j alloue n cases, dans chaques case je defini un pointeur vers m cases que j'alloue etc ...) c est plus hierarchique et plus commentable qu une declaration de 20 tableaux de 20 tableaux de 20 short en une seule fois.


 
Je pense (à mon humble avis, chacun à ses habitudes de coding) que c'est tout à fait commentable si pas utilisé n'importe comment (comme n'importe quoi en C, d'ailleurs).
 
Par contre l'intérêt est clairement plus limité qu'avec malloc, ça c'est évident. Je me vois pas faire du semi-dynamique sans malloc :D
Mais je trouve que ça peut être sympathique à utiliser pour des cas simples.

n°1056749
Elmoricq
Modérateur
Posté le 22-04-2005 à 15:37:15  profilanswer
 

Joel F a écrit :

o_O heu la je dis : nah ...


 
Euh, si, malloc c'est assez gourmand.
 
 

push a écrit :

The -ansi option does not cause non-ISO programs to be rejected
gratuitously.  For that, -pedantic is required in addition to -ansi.
 
-pedantic
Issue all the warnings demanded by strict ISO C and ISO C++; reject
all programs that use forbidden extensions, and some other programs
that do not follow ISO C and ISO C++.  For ISO C, follows the ver-
sion of the ISO C standard specified by any -std option used.

 
man gcc  :o


 
Oui merci, j'ai le même.
Seulement quand on lit la suite :

Citation :


Valid ANSI standard C programs should compile  properly with or without this option (though a rare few will re-quire `-ansi').  However, without this option,  certain GNU extensions and traditional C features are supported as well.  With this option, they are  rejected.


 
Et on est, a priori, bien dans le cas d'une fonctionnalité spécifiée dans la norme ANSI...  
Ou alors j'ai rien capté.


Message édité par Elmoricq le 22-04-2005 à 15:39:58
n°1056750
Joel F
Real men use unique_ptr
Posté le 22-04-2005 à 15:38:05  profilanswer
 

mais bordel vous travailler sur quoi ? et surtout comment ?

n°1056752
fullnight
Posté le 22-04-2005 à 15:39:38  profilanswer
 

un truc que je pige pas a mon propre code
quand je fais
scanf("%hd",&v[i][j][k]);  
 
il n'y a qu'un seul formateur ==> %hd
 
alors comment ca se fait que j'arrive a remplir TROIS var !! (i,j et k)
 
de + pourquoi DOIS JE mettre  &
 
je sais bien que scanf a besoin d'une adresse      
mais...
s'agit il bien d'une adresse quand je fais ceci &v[i][j][k] ??
 
de quelle adresse s'agit il??

n°1056759
KangOl
Profil : pointeur
Posté le 22-04-2005 à 15:42:02  profilanswer
 

faut que tu revois tes pointeurs toi...


---------------
Nos estans firs di nosse pitite patreye...
n°1056764
Elmoricq
Modérateur
Posté le 22-04-2005 à 15:43:46  profilanswer
 

fullnight a écrit :

un truc que je pige pas a mon propre code
quand je fais
scanf("%hd",&v[i][j][k]);  
 
il n'y a qu'un seul formateur ==> %hd
 
alors comment ca se fait que j'arrive a remplir TROIS var !! (i,j et k)


 
Ca ne remplit pas trois variables, ça renseigne ce qui se trouve dans le tableau 'v' aux positions 'i', 'j' et 'k' (ici, v[0][0][0] est renseigné).
 

fullnight a écrit :

de + pourquoi DOIS JE mettre  &
 
je sais bien que scanf a besoin d'une adresse      
mais...
s'agit il bien d'une adresse quand je fais ceci &v[i][j][k] ??
 
de quelle adresse s'agit il??


 
C'est l'adresse de la case du tableau 'v' à la position (0,0,0).

n°1056769
++fab
victime du syndrome IH
Posté le 22-04-2005 à 15:44:22  profilanswer
 

Comme ça a été dit, les VLA font parti du standard C99. Donc c'est utilisable .|
Ceci dit, 99, c'etait y a déjà un moment, et le fait est que la mayonnaise ne prends pas :(
 
pour les 9 erreurs : VC6 date de 98, donc n'implémente pas C99 ...

n°1056781
push
/dev/random
Posté le 22-04-2005 à 15:49:55  profilanswer
 

Elmoricq>
 
-ansi
In C mode, support all ISO C90 programs.  In C++ mode, remove GNU
extensions that conflict with ISO C++.

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  mini question ! Est ce que ceci est correct?

 

Sujets relatifs
[Perl] Question toute bête?Petite question VBS
qui peut dire ce qui cloche dans mon mini prog ?? [ RESOLU ][VBA] Question simple sur InStr et adresse e-mail...
petite question sur les THREADQuestion sur upload de fichier
Bonjour, juste une question !Question sur la validation d'un formulaire
Petite question de performance...Question niveau performances du script
Plus de sujets relatifs à : mini question ! Est ce que ceci est correct?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)