
|
|
Auteur
|
Message
|
1
2
|
Vive la bière allemande
|
|
|
bonjour a tous
dans un programme je vais etre amené à devoir taper des lignes du style "modify eta 0.3" lorsque le programme me le demandera.
Vous savez comment faire ?
ce que je veux, c'est taper "modify parametres nouvelle_valeur", que le programme repère que je veux modifier quelque chose, puis qu'il prenne le nom du paramètre à modifier, et enfin qu'il le modifie en tenant compte de la nouvelle valeur (ce n'est pas forcément un entier) que je veux lui donner.
attention, je ne cherche pas à ce qu'il fasse directement dans le programme parametre=nouvelle_valeur, ce serait trop compliqué et dangereux. Apres que le programme ait repéré que je veux modifier quelque chose, je ferai un switch pour savoir quel variable correspond au "paramètre" rentré par les soins de l'utilisateur.
merci :)
si vous voulez d'autres précisions, je suis à votre disposition
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
|
|
Vendeur de larmes
|
|
|
|
si mes souvenirs sont bons, pour saisir ta chaine, il te faut plutot utiliser gets() et non scanf()
-------
buy it, use it, break it, fix it, trash it, change it, upgrade it, charge it, pawn it, zoom it, press it, snap it, work it, erase it, write it, get it, paste it, save it, load it, check it, rewrite it, plug it, play it,
|
|
Vive la bière allemande
|
|
|
nan :
à un moment (quand j'appuierai sur Ctrl-C en fait), j'aurai un texte du genre
user >
affiché à l'écran, et le programme attendra que je tape quelque chose.
si je met comme code
[code] scanf("%s",commande);
printf("%s\n",commande);
[/code]
et que je tape "modify eta", il affiche "modify"
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
|
|
Vendeur de larmes
|
|
|
oui, c'est normal,le scanf() s'arrete a l'espace
utilises gets() a la place, et ca marchera
-------
buy it, use it, break it, fix it, trash it, change it, upgrade it, charge it, pawn it, zoom it, press it, snap it, work it, erase it, write it, get it, paste it, save it, load it, check it, rewrite it, plug it, play it,
|
|
Vive la bière allemande
|
|
|
e-deby a écrit :
si mes souvenirs sont bons, pour saisir ta chaine, il te faut plutot utiliser gets() et non scanf()
j'ai mis gets(commande);
et a la compilation il dit :
pmc.o(.text+0x571): the `gets' function is dangerous and should not be used.
le man :
gets() lit une ligne depuis stdin et la place dans le
buffer pointé par s jusqu'à atteindre un retour-chariot,
ou EOF, qu'il remplace par '\0'. Il n'y a pas de vérifi-
cation de débordement de buffer (voir plus bas la section
BOGUES).
char *gets (char *s);
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
|
|
Vendeur de larmes
|
|
|
ah ?
ben je sais pas alors, je faisais comme ca...
-------
buy it, use it, break it, fix it, trash it, change it, upgrade it, charge it, pawn it, zoom it, press it, snap it, work it, erase it, write it, get it, paste it, save it, load it, check it, rewrite it, plug it, play it,
|
|
Vive la bière allemande
|
|
|
wai ca a l'air dangereux :D
enfin si ca marche m'en fout
ca marche pas mal, sauf un truc qui me gene :
quand ma fonction est
[code]
void demande (void)
{
char commande[32];
printf ("user > ");
scanf("%s",commande);
/*gets(commande);*/
printf("%s\n",commande);
if (strcmp(commande,"quit")==0) {exit(EXIT_SUCCESS);}
sig=0;
} [/code]
et que je fait Ctrl+C, ca marche comme il faut : il marque user > et s'arrete.
en revanche, quand ma fonction est
[code]
void demande (void)
{
char commande[32];
printf ("user > ");
/*scanf("%s",commande);*/
gets(commande);
printf("%s\n",commande);
if (strcmp(commande,"quit")==0) {exit(EXIT_SUCCESS);}
sig=0;
} [/code]
le premier Ctrl-C ne marche pas, enfin ca affiche user > mais ca ne s'arrete pas. C'est le deuxieme qui marche. Je prefererais que ca marche dès le premier moi.
Tu as une idée d'ou ca peut venir ?
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
|
|
/// lamborghini murcielago \\\
|
|
|
|
et ce programme que tu veut faire,c'est un devoir d'ecole?
|
|
Vive la bière allemande
|
|
|
|
en quelques sortes, sauf que je suis le seul a le faire et que j'ai plusieurs mois
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
|
|
Vendeur de larmes
|
|
|
la,j'ai beau reflechir, je vois pas trop d'ou peut venir ton pb de Crtl-C
Cette fonction, c'est un peu juste pour avoir une vue globale du truc...
-------
buy it, use it, break it, fix it, trash it, change it, upgrade it, charge it, pawn it, zoom it, press it, snap it, work it, erase it, write it, get it, paste it, save it, load it, check it, rewrite it, plug it, play it,
|
|
/// lamborghini murcielago \\\
|
|
|
Library a écrit :
en quelques sortes, sauf que je suis le seul a le faire et que j'ai plusieurs mois
donc c'est toi qui a choisi de faire du C?
parceque t'es plus en avance que moi en C alors que je suis en bts informatique
|
|
Vendeur de larmes
|
|
|
forummp3 a écrit :
donc c'est toi qui a choisi de faire du C?
parceque t'es plus en avance que moi en C alors que je suis en bts informatique
wai, mais bon, prepa,donc vala
-------
buy it, use it, break it, fix it, trash it, change it, upgrade it, charge it, pawn it, zoom it, press it, snap it, work it, erase it, write it, get it, paste it, save it, load it, check it, rewrite it, plug it, play it,
|
|
/// lamborghini murcielago \\\
|
|
|
e-deby a écrit :
wai, mais bon, prepa,donc vala
il a notre age
|
|
Vive la bière allemande
|
|
|
e-deby a écrit :
la,j'ai beau reflechir, je vois pas trop d'ou peut venir ton pb de Crtl-C
Cette fonction, c'est un peu juste pour avoir une vue globale du truc...
voila j'utilise les signaux pour pouvoir convertir le Ctrl-C qui quitte le programme en un Ctrl-C qui interromp les calculs et me redonne la main pour que je puisse effectuer certaines modifications.
voici qq fonctions en vrac :
[code]
void handINT ( int signo)
{
sig=1;
}
/* dans main : */
for (i=0;i<nombre;i++) {
/* pas mal de boucles et d'instructions */
signal (SIGINT, handINT) ;
if (sig==1) {demande();} /* si sig=1, c a d si j'ai fait Ctrl-C, je donne la main à l'utilisateur */
}
[/code]
voila, la t'as a peu pret toute la structure importante pour comprendre le but de ma fonction demande(), mais je vois pas pourquoi ca fait ce que j'ai mis dans mon post plus haut
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
|
|
Vive la bière allemande
|
|
|
forummp3 a écrit :
donc c'est toi qui a choisi de faire du C?
parceque t'es plus en avance que moi en C alors que je suis en bts informatique
j'ai choisi de passer au C, comme j'avais choisi d'apprendre le visual basic (sans trop de succes) y a environ 6 ans, le perl y a 4 ans, le php y a environ 3 ans. En plus, le passage du php au C s'est fait assez facilement, étant donné qu'il y a assez peu de différence entre les deux langages (le C est juste bcp plus raide).
j'ai jamais eu un seul prof d'info, c'est moi qui ai décidé d'apprendre à programmer pour faire des sites web, puis la le C pour mon tipe.
mais par contre tu dois apprendre plus en détails que moi, moi je n'apprends que ce qui m'est utile pour mon programme, par exemple je connais le strict minimum au niveau des pointeurs (je les utilise que pour faire des tableaux), et je ne connais pas les structures (enfin si j'en ai besoin un jour, j'apprendrai a m'en servir).
En plus, je demande pas mal de renseignements sur les parties de programme que je n'arrive pas à faire sur des forums, ou à deux gars de ma classe qui sont vraiment forts en C.
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
|
|
/// lamborghini murcielago \\\
|
|
|
ha ok,ben avec le cours de c que mon prof m'a passer j'espere que ca va aller mieux pour toi
|
|
Vive la bière allemande
|
|
|
forummp3 a écrit :
ha ok,ben avec le cours de c que mon prof m'a passer j'espere que ca va aller mieux pour toi :)
mon but pour l'instant c'est pas d'apprendre le C, c'est de faire un programme en C qui marche ;)
bien sur pour ca, je suis obligé d'apprendre les bases du C et ce qui me sert comme fonctions spéciales.
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
|
|
|
|
Vive la bière allemande
|
|
|
merci, je vais essayer de remplacer gets par fgets
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
|
|
Vive la bière allemande
|
|
|
|
ca résoud pas mon probleme de premier Ctrl-C qui marche pas et j'ai l'impression que ca prend aussi le retour-chariot, ce qui est un peu génant pour moi
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
|
|
Vendeur de larmes
|
|
|
si tes commandes doivent se composer de trois mots a chaque fois, tu peux toujours utiliser 3 scanf() a la suite, avec 3 variables
utilises fflush(stdin) a la fin pour etre sur
-------
buy it, use it, break it, fix it, trash it, change it, upgrade it, charge it, pawn it, zoom it, press it, snap it, work it, erase it, write it, get it, paste it, save it, load it, check it, rewrite it, plug it, play it,
|
|
Vive la bière allemande
|
|
|
nan c pas toujours 3 mots a la fois, c ca le probleme :D
ca fait quoi fflush ?
je v partir au lycée, bonne matinée
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
|
|
Vendeur de larmes
|
|
|
bon, tant pis
fflush(stdin), je crois me rappeler que cq nettoie le buffer d'entree
De toute facon, c'etait super nase cette idee
bosse bien
-------
buy it, use it, break it, fix it, trash it, change it, upgrade it, charge it, pawn it, zoom it, press it, snap it, work it, erase it, write it, get it, paste it, save it, load it, check it, rewrite it, plug it, play it,
|
|
Vive la bière allemande
|
|
|
j'ai pas trop bossé, c'est mercredi ;)
enfin j'ai bien plus bossé apres les cours que pendant :D
sinon, y a pas un équivalent en C de la fonction explode ?
ce que je veux c'est deja détecter le nombre d'espaces dans ma chaine, puis comparer les caracteres avant le premier espace à certains mots, et si nécessaire comparer le deuxieme mot à certains mots, puis regarder la fin de la chaine de caracteres
vous savez comment faire ?
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
|
|
Vive la bière allemande
|
|
|
j'ai commencé, mais j'ai une erreur. Mon code est :
[code] char commande[32],mot0[32]="";
int nb_espaces=0,i,*char_espace,j;
printf ("user > ");
/* on demande à l'utilisateur ce qu'il veut */
gets(commande);
/* on compte le nombre d'espaces */
for (i=0;i<strlen(commande);i++)
{
if (commande==' ') nb_espaces++;
}
/* si il y a plus d'un espace, il faut reperer ou sont ces espaces*/
if (nb_espaces!=0)
{
char_espace=malloc(nb_espaces*sizeof(int));
j=0;
for (i=0;i<strlen(commande);i++)
{
if (commande==' ') {char_espace[j]=i; j++;}
}
/* on recupere le premier mot de la commande */
for (i=0;i<char_espace[0];i++) strcat(mot0,commande);
}
[/code]
mon probleme c'est :
pmc.c:238: warning: passing arg 2 of `strcat' makes pointer from integer without a cast
c'est la fonction strcat, qui prend comme deuxieme argument une chaine de caracteres, et la c'est seulement UN caractere que je veux ajouter :(
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
|
|
|
|
|
strcat(mot0,new String(commande)); ca ne fonctionnerait pas?
au fait, tu peux utiliser les // pour les commentaires d'une seule ligne ; )
|
|
Vive la bière allemande
|
|
|
|
pmc.c: In function `demande':
pmc.c:239: `new' undeclared (first use in this function)
pmc.c:239: (Each undeclared identifier is reported only once
pmc.c:239: for each function it appears in.)
pmc.c:239: parse error before `String'
:(
gcc aime pas les // apparament
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
|
|
Vendeur de larmes
|
|
|
|
non, // ne fait pas partie du C standart
-------
buy it, use it, break it, fix it, trash it, change it, upgrade it, charge it, pawn it, zoom it, press it, snap it, work it, erase it, write it, get it, paste it, save it, load it, check it, rewrite it, plug it, play it,
|
|
|
|
|
oh, new c'est en c++ finalement..
et désolée pour les //, j'ai pris des mauvais plis à travailler avec visual et borland ; )
|
|
Vive la bière allemande
|
|
|
|
t'as pas une autre idée pour le strcat ?
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
|
|
|
|
|
|
finalement, ce que tu veux faire c'est extraire le début de ta chaine jusqu'au premier espace?
|
|
Vive la bière allemande
|
|
|
c'est ca
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
|
|
|
|
|
Je ne sais pas si c'est standard, j'ai pas essayé avec autre chose que Borland ; )
ca retourne le premier mot jusqu'à l'espace, si espace il y a :
[code] char *ptr;
int c, index;
clrscr();
printf("user > ");
gets(commande);
/* renvoie la position du premier espace */
ptr = strchr(commande, ' ');
if (*ptr){
/* espace trouvé, extraction */
index = ptr - commande;
printf ("Espace trouvé à l'index : %d \n", index);
for (c = 0; c < index; c++){
mot0[c] = commande[c];
}
printf ("mot = %s\n", mot0);
}[/code]
|
|
|
|
|
|
faudrait peut-etre faire index-- parce que là, je crois que ca retourne l'espace avec le premier mot..
|
|
Vive la bière allemande
|
|
|
|
ca fait quoi clrscr ?
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
|
|
|
|
|
|
rien, ca flush l'écran Shell, oublies ca ; )
|
|
|
|
|
|
alors Library, ca fonctionne?
|
|
Vive la bière allemande
|
|
|
oui j'ai fait a peu pres ca, j'ai fait
[code] mot0=malloc((char_espace[0]+1)*sizeof(char));
/* on recupere le premier mot de la commande */
for (i=0;i<char_espace[0];i++) mot0=commande;
mot0[char_espace[0]]='\0';
printf("mot0 : %s\n",mot0);[/code]
ca marche tres bien
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
|
|
Vive la bière allemande
|
|
|
j'ai un p'tit probleme pour comparer deux chaines de caracteres
pour l'instant j'ai
[code]if (strcmp(mot0,"quit")==0) {exit(EXIT_SUCCESS);}[/code]
et ca marche tres bien.
Mais ce que je voudrais c'est faire un switch pour les différentes possibilités de mot0, et pour ca il faudrait que je sache mettre la ligne au dessus sous la forme
[code]if (mot0=="quit") {exit(EXIT_SUCCESS);}[/code]
mais ca a pas l'air de marcher :(
help
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
|
|
Vive la bière allemande
|
|
|
sinon, ca veut dire quoi
pmc.c:279: warning: passing arg 1 of `liste_fichiers' discards qualifiers from pointer target type
?
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
|
|
1
2
|
|