TutorielsVous débutez ? C'est ici qu'on commence !
Mon compte
Recherche
Livre d'or
PublicitéVous devez être inscrit pour pouvoir poster des messages
| Page : Précédente 1 2 | |
| Auteur | Message |
|---|---|
| 1 visiteur sur ce sujet (1 anonyme) | |
| Page : Précédente 1 2 | |
GuilOooo
|
# Posté le 22/04/2007 à 17:54:15 |
PriPrOTtTt§!!!§![]() Groupe : Membres |
Reprise du dernier message de la page précédente :
[2][9] Quand je fais un scanf pour récupérer un nombre, si l'utilisateur tape une lettre, j'ai pleins de problèmes. Que faire ?Lire ce tutoriel pour apprendre à vous passer de scanf et utiliser quelque chose de plus solide : Les tutoriaux > Non-Officiels > Programmation > C/C++ > [C] Réaliser des saisies sécurisées grâce à fgets. PS : M@teo21 a lui même écrit quelque chose à ce sujet, c'est une annexe du cours de C. Lire l'annexe du cours de C sur les entrées sécurisées.
Édité
le 07/05/2008 à 21:06:56
par GuilOooo
|
zulon
|
# Posté le 23/04/2007 à 10:43:44 |
The shrieker shrieks.![]() Groupe : Membres |
[7][5] Quelle est la différence entre une bibliothèque et une librairie ?
En informatique, une Bibliothèque logicielle est un ensemble de fonctions regroupées pour réaliser un groupe de tâches du même domaine. Une librairie est un local avec une porte, des fenêtres et des livres à vendre sur des étagères. Ne confondez pas les deux! Library, en anglais, est un "faux-ami", qui veux dire bibliothèque. L'erreur vient de là. Citation : M@teo21 - Le tuto A noter : le mot anglais est "library" et il se traduit par "bibliothèque". "Librairie" est donc un faux-ami.
En théorie, on devrait donc dire bibliothèque et non librairie. Mais pour ma part, j'ai pris l'habitude d'écrire librairie (et je ne suis pas le seul ) donc je continuerai à utiliser ce terme. Retenez quand même que la traduction exacte est plutôt "bibliothèque".
Édité
le 25/04/2007 à 12:41:31
par zulon
|
Kevin Leonhart
|
# Posté le 28/04/2007 à 18:48:19 |
![]() Groupe : Membres |
[7][6] Comment récupérer la date et/ou l'heure ?
Toutes les fonctions utilisées dans cette question sont présentes dans l'en-tête <time.h>. La première étape est de récupérer le timestamp. Pour cela rien de bien dur : Code : C time_t temps = time(NULL);
On peut d'ailleurs vérifier qu'on a la bonne valeur en l'affichant : Code : C Maintenant il nous faut se servir d'une fonction qui va déduire la date et l'heure à partir du timestamp. Cette fonction c'est ``ctime". Elle prend l'adresse de la variable contenant le timestamp en paramètre et en ressort une chaîne de caractères contenant toutes les informations. Code : C Donnera par exemple : Code : Console Sat Apr 28 15:19:06 2007
On peut aussi contrôler plus finement les informations qu'on veut afficher. Pour cela, il faut passer par une "conversion" du timestamp en une structure de type `tm'. La fonction ``localtime" s'en occupe très bien en nous renvoyant l'horaire locale, contrairement à ``gmtime" qui renvoie l'horaire UTC. Code : C /* on récupère le timestamp */
time_t timestamp = time(NULL); /* on le convertit dans une instance de la structure tm */ struct tm *temps = localtime(×tamp); Comme vous pouvez le voir sur la page de documentation de la structure `tm', celle ci contient toutes les informations que nous voulons. Nous pouvons donc afficher l'heure par exemple en faisant simplement : Code : C Ce qui chez moi donne : Code : Console 16
Méfiez vous tout de même, ça parait évident mais le programme vous affichera l'heure de votre système d'exploitation. Ainsi sur mon système qui a 2 heures de retard (allez savoir pourquoi ), le programme m'affiche 16 sans vergogne alors qu'il est 18 heures en réalité...
A partir de votre instance de tm, vous pouvez aussi afficher tout d'un coup, grâce à ``asctime" Code : C time_t timestamp = time(NULL);
struct tm *temps = localtime(×tamp); printf("%s", asctime(temps)); Donnera : Code : Console Sat Apr 28 15:19:06 2007
Ou vous pouvez enfin formater seulement les informations qui vous intéressent dans une chaîne de caractères grâce à ``strftime". Code : C /* on récupère le timestamp */
time_t timestamp = time(NULL); /* on crée une chaîne suffisamment longue */ char chaineSortie[20]; /* on convertit le timestamp dans une instance de la structure tm */ struct tm *temps = localtime(×tamp); /* on récupère les infos qu'on veut dans la chaîne */ strftime (chaineSortie, 20, "Il est %H:%M:%S", temps); /* on affiche le tout */ printf ( "%s", chaineSortie); Donnera par exemple : Code : Console Il est 16:48:24
Comme vous le voyez, ce sont les formateurs %H, %M, ... qui indiquent ce qui atterrira dans votre chaîne. Pour la liste complète, reportez vous sur la page de documentation. La seule chose dont il faut se méfier c'est de créer une chaîne suffisamment longue.
Édité
le 04/05/2007 à 19:30:14
par Kevin Leonhart
|
gouttegd
|
# Posté le 30/04/2007 à 00:50:18 |
![]() Groupe : Membres |
Cette question ne concerne pas vraiment la programmation en C, mais beaucoup de Zér0s sous Windows se la posent, alors...
[2][10] Comment afficher des caractères accentués sous Windows ? Par défaut, la console de Windows utilise un encodage hérité du temps de MS-DOS (l'encodage IBM 850), qui ne permet pas d'afficher les caractères accentués ou les caractères spéciaux comme ©, ®, «, », etc. Toutefois, l'encodage utilisé par la console de Windows est modifiable à volonté, par la commande chcp (CHange CodePage) intégrée à l'interpréteur de commandes. Ainsi, entrer cette commande Code : Console - Afficher / masquer les numéros de ligne chcp 1252
indiquera à votre console d'utiliser la "page de code 1252", qui est un encodage très proche du Latin-1, idéal pour la langue française. Il n'est alors nul besoin de modifier vos programmes (ni même de les recompiler), les accents et autres caractères spéciaux s'afficheront sans problèmes. Une autre possibilité consiste à changer l'encodage directement depuis le code de votre programme, en utilisant la fonction appropriée de l'API Windows, SetConsoleOutputCP(). Dans ce cas, une bonne pratique consiste à récupérer l'encodage utilisé au démarrage du programme afin de pouvoir le restaurer à la sortie. Code : C - Afficher / masquer les numéros de ligne
Quelle que soit la méthode retenue, si vous utilisez la console Windows "standard", il faut encore changer la police utilisée par celle-ci pour la remplacer par une police capable d'afficher des caractères accentués : clic-droit sur la barre de titre de la console, "Propriétés", dans l'onglet "Police", choisissez la police "Lucida Console". En fermant la fenêtre, sélectionnez "Enregistrer les propriétés pour les futures fenêtres portant le même titre". Notez que ce n'est pas nécessaire si vous utiliser le nouvel interpréteur de commandes de Microsoft, PowerShell. Autre possibilité, ne nécessitant aucune configuration de la console cible (au niveau de la fonte comme de l'encodage), l'utilisation des fonctions CharToOem ou CharToOemBuffer de l'API Windows : Code : C - Afficher / masquer les numéros de ligne
(Merci à tc pour avoir suggéré cette solution. )
Édité
le 04/12/2007 à 13:25:10
par gouttegd
« Je vous aiderai si vous me promettez d'aider quelqu'un d'autre en retour. » --- Anonyme « Soyez vigilant lorsque vous vous exprimez dans un forum électronique. Vos fautes de frappes et de syntaxe vous poursuivront pour l'éternité. » --- Linus B. Torvalds http://fr.hypo-theses.com/ |
scriptoff
|
# Posté le 01/05/2007 à 20:52:21 |
While I breath , I hope![]() Groupe : Membres |
|
Yno
|
# Posté le 04/05/2007 à 12:06:02 |
ULP![]() Groupe : Membres |
[4][7] Comment transformer ma chaîne de caractères en une valeur (int, float) ?
Si vous possédez une chaîne de caractères tel que : Code : C char number[] = "12";
Il vous est possible d'extraire le nombre que représente cette chaîne afin d'obtenir une variable de type long valant 12. Pour cela, vous pouvez utiliser la fonction strtol() : Code : C #include <stdlib.h>
char number[] = "12"; long var = strtol(number, NULL, 0); /* ici, var = 12 */ Il est aussi possible de convertir des nombres flottants. Pour cela, utilisez strtod() : Code : C #include <stdlib.h>
char number[] = "12.5"; double var = strtod(number, NULL); /* ici, var = 12.5 */ Un exemple d'utilisation pratique est disponible ici : http://www.siteduzero.com/tuto-3-11181-1-c-realiser-des-saisies-securisees-grace-a-fgets.html Pour convertir une chaîne formatée, vous pouvez utiliser sscanf() : Code : C #include <stdio.h>
#include <stdlib.h> int var1, var2; char number[] = "12 25"; sscanf(number, "%d %d", &var1, &var2); /* ici, var1 = 12 et var2 = 25 */ La fonction sscanf renvoie un entier représentant le nombre de conversions réussis, il peut être bon de tester cette valeur afin de savoir si elle correspond aux nombres de conversions que l'on a demandé (2 dans notre cas), si elle est inférieur, il y a une erreur de format. Pour plus de précisions sur l'utilisation des fonctions strto* et *scanf, reportez-vous aux pages de man : Avec l'aimable participation de : - asmanur - scriptoff - Zulon
Édité
le 12/05/2007 à 17:46:28
par Yno
|
Yno
|
# Posté le 05/05/2007 à 12:07:59 |
ULP![]() Groupe : Membres |
[8][2] Que signifie le signe # dans une macro ?
Cela demande au préprocesseur d'encadrer la variable qui suivra # par des guillemets. Voici un exemple : Code : C #define PRINTINT(var) printf("%s = %d\n", #var, var)
int ma_variable = 2; int mon_autre_variable = 0; PRINTINT(ma_variable); PRINTINT(mon_autre_variable); Code : Console ma_variable = 2
mon_autre_variable = 0 Au premier appel de la macro PRINTINT par exemple, le préprocesseur remplacera cet appel par cette ligne de code : Code : C
Édité
le 12/05/2007 à 17:46:12
par Yno
|
230
|
# Posté le 10/05/2007 à 00:13:23 |
Porque te vas.![]() Groupe : Membres |
[2][11]Comment peut-on lire une chaîne de caractères contenant des blancs (espaces, tabulations, etc.)?
D'abbord, je tiens à préciser que scanf est mal ! (voir FAQ [2] [5]). La commande associée a scanf pour pouvoir lire des chaînes de caractères comportant des blancs est : Code : C scanf("%[^\n]", ch);
getchar(); Lien informatif : scanf démythifiée Entrée solide en C ![]() |
smilz
|
# Posté le 11/05/2007 à 15:46:17 |
La vie est une blague![]() Groupe : Membres |
[7][8] : Comment compiler sous Vista avec MinGW/GCC ?
Code::Blocks et MinGWLe compilateur et le Code::BlocksIl vous faut déjà tout le matériel nécessaire :
Comme le dit Nesquik69 dans son tutoriel, ne changez surtout pas le lieu d'installation !!! Configurons MinGWJe ne ferais là que citer ce message : Citation : forum hard ware - Déplacer les fichiers suivant : C:\MinGW\libexec\gcc\mingw32\3.4.5\cc1.exe => C:\MinGW\bin\cc1.exe C:\MinGW\libexec\gcc\mingw32\3.4.5\cc1plus.exe => C:\MinGW\bin\cc1plus.exe C:\MinGW\libexec\gcc\mingw32\3.4.5\collect2.exe => C:\MinGW\bin\collect2.exe utilisez C:\MinGW\include et C:\MinGW\lib pour installer vos APIs il se peut que se ne soit pas 3.4.5, cela revient au même ! Configurons C::BCette étape est peut-être facultative ! Mais vérifier toujours au cas où Aller dans settings => Compiler and debugger... Une fenêtre s'ouvre, sélectionnez GNU GCC Compiler dans la première liste déroulante puis toolchain executables dans la deuxième, cliquez sur auto-detect. Si dans la boîte texte à coté s'affiche C:\MinGW alors c'est bon ! sinon, recopier tout ce qu'il y a sur le screen ci-dessous : Le Set as default sert juste à dire que vous utilisez ce compilateur par défaut, je le précise pour ceux qui ont utilisé VC++ Express édition® avant MinGW. Je crois qu'il faut relancer l'IDE en suite, à vérifier. Maintenant, vous devez mettre vos bibliothèques dans le dossier C:\MinGW\includes\ et C:\MinGW\libs\ Attention : Code::Blocks + Vista + MinGW = Javascript, on modifie un truc et tout plante Secret (cliquez pour afficher) Vous avez réussi ? Bravo ! Vous pouvez maintenant utiliser Code::Blocks avec votre OS préféré ! Dev-C++ et CygwinLà c'est extrêmement simple : Aller, une petite aide : Lien de tréléchargement de cygwin http://www.siteduzero.com/forum-83-122974-1111270.html#r1111270 http://www.siteduzero.com/forum-83-122974-1111980.html#r1111980 Et surtout, n'oubliez pas de relancez l'IDE !!! ou encore : http://www.siteduzero.com/forum-83-124218-1124904.html#r1124904 Vous pouvez maintenant compiler sous Vista avec Dev-C++
Édité
le 04/09/2007 à 18:58:48
par smilz
Maman a apporté les piles ! Les piles longue durée ! Maman a apporté les piles ! Alors plus de télé ! |
scriptoff
|
# Posté le 18/05/2007 à 12:51:16 |
While I breath , I hope![]() Groupe : Membres |
[7][9]Les bases de gdb
Sous linux , aprés avoir compilé votre binaire avec le support debug( "-g" ) Code : Console gdb votrebinaire
vous obtenez ceci : -> (gdb) je vais vous indiquer les commandes les plus utile : r -> run , execute le binaire . Si le problème de votre programme est un segfault , il s'arreteras à la ligne de votre code qui le provoque . b-> breakpoints , interrompt le programme . vous pouvez utiliser un numèros de ligne , une fonction . permet d'explorer une fonction de votre code et vous executé le programme ligne par ligne , n-> ligne suivante . l-> list , liste le code source . Vous pouvez utiliser un nombre pour indiquer la ligne du milieu qu'il vas afficher . p-> print , affiche une variable . Il affiche tout ce que l'on veut : chaine de caractères , entiers. q->quit , pour quitter La complétion peut ètre utiliser via la touche tabulation.
Édité
le 17/06/2007 à 19:46:34
par scriptoff
|
GuilOooo
|
# Posté le 07/06/2007 à 20:54:26 |
PriPrOTtTt§!!!§![]() Groupe : Membres |
[6][3]Comment créer un OS ?
Faire un «vrai» OS, même s'il n'est qu'en console, est long et compliqué (si on veut avoir un truc correct, je parle pas d'un OS qui affiche «hello world» puis ne fait rien). Il va vous falloir plusieurs choses. Pour faire un OS, donc, il vous faudra un langage de programmation tel que le C, mais aussi un assembleur (et faire de l'assembleur). La toute première partie de votre OS, celle qui démarre l'ordi (le boot loader) doit être écrite en assembleur (à moins que vous preniez un soft qui fait le travail à votre place, comme GRUB. Ensuite, certaines autre portions critiques seront faite en assembleur. Le reste, vous pouvez le coder en C. Voici quelques liens pour vous orienter : Le plus important et ce par quoi vous devriez commencer : un système d'exploitation, c'est quoi ? Selon CommentCaMarche.net Selon Wikipedia Quelques systèmes d'exploitation et/ou noyaux que vous pouvez étudier : BOSO Kernel, un tutoriel construit autour d'un exemple. SOS (Simple OS), un OS tout simple dont vous pouvez étudier le code source. Minix, un autre code intéréssant à étudier proorOS, en C++, mais aussi utilisable (pour le boot sector par exemple) Kernel Linux 1.0 ... Tutoriaux sur les notions de système d'exploitation PelleGrini sur developpez Pagnotte sur developpez Quelques tutoriaux sur le codage à proprement parler vont venir, faut que je les retrouve. En attendant, si vous avez des adresses à ajouter, envoyez moi un MP.
Édité
le 15/06/2007 à 17:58:18
par GuilOooo
|
GuilOooo
|
# Posté le 15/06/2007 à 18:10:44 |
PriPrOTtTt§!!!§![]() Groupe : Membres |
[3][3] Quand je compare ma variable avec un nombre dans un if, la condition est toujours vraie, même si elle n'est pas sensée l'être. Pourquoi ?
Probablement parceque vous vous êtes trompé d'opérateur. Vous avez utilisé '=' au lieu de '=='. Mauvais exemple :Code : C #include <stdio.h>
#include <stdlib.h> int main(void) { char buffer[32]; int age = -1; /* Saisie de l'age */ do { fgets(buffer, 32, stdin); } while( sscanf(buffer, "%d", &age) < 1); /* Bon je vous passe le nettoyage du buffer ici, mais theoriquement faudrait le faire */ /* Le probleme se situe ici : il faut toujours deux '=' dans les conditions !! */ if(age = 18) /* ERREUR */ { puts("Vous etes devenu majeur cette annee !"); } else { puts("Vous n'avez pas atteint votre majorite cette annee ci."); } return 0; } Correction :Code : C /* Le reste du code est identique */
if(age == 18) { /* ... ... ... */ Que se passe t'il si je mets un seul égal ? Le compilateur ne dit rien ? Eh bien, avec un seul égal, la variable va être modifiée pour contenir le nombre auquel vous l'affectez. Après quoi, cette nouvelle valeur sera comparée à zéro (comme dans «if(variable)»). Ce n'est pas du tout ce que vous voulez, mais en C, c'est parfaitement légal, donc le compilateur ne met pas d'erreur (enfin, s'il est perspicace, il vous sortira tout de même un warning).
L'opérateur ==, lui, compare la variable à la valeur. C'est cela que nous recherchons. Si vous avez peur de vous tromper, utilisez cette astuce : Code : C if(18 == variable){
En effet, ce code est tout aussi correct (comparer 18 à variable revient au même que de comparer variable à 18), mais, si vous vous trompez, vous aurez une erreur de votre compilateur : Code : C if(18 = variable){ /*ERREUR */
En effet, ce code tente de mettre variable dans 18, ce qui n'a aucun sens car 18 est un nombre. Le compilateur vous le signalera et refusera de compiler. Ainsi, plus de risque d'erreur inaperçue. Avec la participation d'Yno et de scriptoff
Édité
le 16/06/2007 à 10:52:20
par GuilOooo
|
GuilOooo
|
# Posté le 17/06/2007 à 15:54:28 |
PriPrOTtTt§!!!§![]() Groupe : Membres |
[3][4] Est-ce que j'ai le droit de faire if( variable == 1 || 2 || 3) ?
Hum... On rejoint un peu la question N°[3][3]. En gros, vous pouvez, mais il ne se passera pas ce à quoi vous vous attendez. Petit rappel : le programme convertit toutes les conditions qu'il rencontre en nombres : 0 si la condition est fausse, une autre valeur sinon. Vous pouvez le vérifier : Code : C #include <stdio.h>
int main() { int cond = ( 1+1 == 2 ); printf("1+1 == 2 -> %d \n", cond); int cond2 = ( cond == 0 ); printf("%d == 0 -> %d", cond, cond2); return 0; } Donnera un truc du style : Code : Console 1+1 == 2 -> 1
1 == 0 -> 0 Ainsi, dans un if(), le programme rentre dans le bloc {} du if si le nombre obtenu après conversion est différent de 0. Ce qui signifie qu'il est possible d'écrire : Code : C {
if(1) { /* Code toujours execute */ } if(0) { /* Code jamais execute */ } } Vous pouvez d'ailleurs remplacer 1 par n'importe quelle valeur différente de 0. Bon. Maintenant, observons ce code : Code : C if(variable == 1 || 2 || 3)
Admettons que variable contienne 1. La condition est vraie. Elle est alors transformée comme ceci : Code : C if( 1 || 2 || 3)
Vu qu'on utilise l'opérateur ||, soit "ou bien", il suffit que l'un de ces trois nombres soit différent de zéro pour que le bloc soit exécuté. comme 2 et 3 ne changent pas, c'est toujours le cas ! Donc cette condition sera toujours vraie, quelque soit la valeur de «variable». En fait, «2» et «3» sont évaluées comme des conditions séparées, et comme ce sont des chiffres différents de 0, ils sont toujours vrais. Du coup, on est obligés de faire : Code : C if(variable == 1 || variable == 2 || variable == 3)
/* Remplacable par : */ if( variable >= 1 && variable <= 3) Encore une fois, ici, le fait d'écrire cette mauvaise condition veut dire quelque chose en C, donc le compilateur ne vous engueulera pas (ou il vous donnera un warning au pire). |
PianoPâriss
|
# Posté le 18/06/2007 à 09:24:25 |
|
Mac Pro Bi-Xeon user Groupe : Membres |
Tient, j'ai quelque chose d'intéressant: @ edit >> ( ), ah oui, j'utilise le mot 'case' pour donner une image, je sais que ce n'est pas très correct, mais bon...Si vous avez un buffer (char []) qui contient un nombre par exemple en 'case' 12 (donc buffer[12] = LeNombreQueJeVeuxObtenirDansUnInt). Vous allez donc devoir passer buffer à sscanf() ; Ok ? Alors, vous vous dites, je dois faire: Code : C - Afficher / masquer les numéros de ligne
C'est énervant de devoir créer une chaine juste pour sscanf() non ? (oui, rappelez vous, les programmeurs sont fénéants )Et ben, voila le truc: Code : C - Afficher / masquer les numéros de ligne
Le compilo va créer une chaine, donc, pour lui ça ne change rien, mais pour nous, c'est vachement plus pratique ![]() P.S. Il me semble qu'on peut aussi modifier l'argument 2 de sscanf() pour qu'il ne prenne que à partir du 12eme caractère mais bon, je préfère mon truc.
Édité
le 20/10/2007 à 14:27:49
par PianoPâriss
La vie n'est qu'une succession de faits donnant naissance à des conséquences [PianoPâriss] ![]() Piano©~1 |
Yno
|
# Posté le 18/06/2007 à 11:11:16 |
ULP![]() Groupe : Membres |
Je rappelle la différence entre les chiffres et les nombres :
http://fr.wikipedia.org/wiki/Chiffre Citation : Zulon Ou pas: si c'est juste un chiffre, c'est atoi(buffer[12]); Soyez précis svp, car pour les chiffres, ceci est portable (merci candide) : Code : C - Afficher / masquer les numéros de ligne
De plus, atoi() attend un pointeur sur char, par un char, et pour finir elle est paraît-il dépréciée (elle et ses copines ato*). http://www.siteduzero.com/forum-83-125906-1303181.html#r1303181 Et pour les nombres, en supposant que nous en ayons un qui commence en "case" 12 : Code : C - Afficher / masquer les numéros de ligne
Édité
le 19/10/2007 à 13:49:58
par Yno
|
Zoloom
|
# Posté le 23/07/2007 à 01:02:28 |
Cauchemard compilatoire![]() Groupe : Membres |
[7|9] Exécuter une ou plusieurs fonction a la fermeture d'un programme :
Voila son prototype : Code : C #include <stdlib.h>
int atexit(void (*fonction) (void )); Effrayant hein ?
Mais non c'est tout bête. Cette fonction permet d'exécuter une ou plusieurs fonction a la fin d'un programme. Elle sont lancées par exit dans l'ordre inverse de leur positionnement par atexit. Exemple : Code : C void coucou() { printf("coucou\n"); } void bonjour() { printf("On dit bonjour malpoli!\n"); } int main() { atexit(bonjour); atexit(coucou); exit(0); } Bien sûr il faut rajouter des choses, mais s'est juste pour vous montrer : Code : Console coucou
On dit bonjour malpoli! Il me semble que le nombre de fonction appelable grâce a atexit est limité, à 20 (à vérifier).
Édité
le 23/07/2007 à 01:02:59
par Zoloom
Carte d'identité Linuxienne ¤ PlayOnLinux ¤ wxWidgets ![]() Administrateur secondaire de PlayOnLinux La version 3 est disponible ! |
Caribou87
|
# Posté le 23/07/2007 à 09:21:43 |
|
Groupe : Membres |
Citation
POSIX.1-2001 nécessite que l’implémentation suive au moins ATEXIT_MAX
(32) pour que de telles fonctions soient enregistrées. La limite actuelle de l’implémentation peut être obtenue avec sysconf(3). |
bjarni3000
|
# Posté le 31/08/2007 à 23:49:36 |
|
Groupe : Membres |
[7|1] Cause d'un phénomène avec les boucles simple...
Bonjour, je suis les cours de mateo depuis peu et donc comprend pas encore tout. J'ai testé le phénomène des boucles avec la petite fonction toute simple: Citation : M@teo21 long nombreEntre = 0; while (nombreEntre != 47) { printf("Tapez le nombre 47(ou autres)! "); scanf("%ld", &nombreEntre); } Pour le tester ben j'ai rentré des chiffres puis me suis demandé ce que ça faisait si quelqun rentrait une valeur non-valable. J'ai donc mis une lettre, "e" en l'occurrence. Et ça n'a pas relancé la boucle contrairement à ce que je pensais mais à afficher un écran plutôt étrange...L'écran est plein de fois la même phrase,"Tapez le nombre47!" Pourquoi mettre une lettre fait-elle cet effet-la à la boucle? pouquoi n'écrit-elle plus une question à la fois? Peut-être que ma réponse se trouve plus loin dans le script aussi, si c'est le cas je suis dsl de vous embêter avec ça, j'y suis simplement pas encore... |
Cyprien_
|
# Posté le 31/08/2007 à 23:53:31 |
Le Monde d'Akhiris![]() Groupe : Membres |
La réponse à ton problème se trouve à l'article 2|9 de cette FAQ : ici.
Par contre, la prochaine fois, ouvre un sujet à part pour poser tes questions .
Un jeu online novateur ? Le Monde d'Akhiris ! |
DOMTOM974
|
# Posté le 06/09/2007 à 10:07:26 |
|
Groupe : Membres |
bonjour je voudrai savoir pourquoi ma version sdl 1.2.12
ne marche pas je croi avoir vu la question quelque part et je ne trouve pas la reponse ps jai 12ans merci davance |
Kevin Leonhart
|
# Posté le 06/09/2007 à 14:28:46 |
![]() Groupe : Membres |
Salut.
Crée un nouveau sujet pour ton problème, ici c'est l'endroit où on met les questions fréquemment posées et leurs réponses. Et donne quelques indices dans ton nouveau post, parce que là avec "je voudrais savoir pourquoi ça marche pas", on peux faire des devinettes pendant une semaine au moins.
"Je vous emmerde, et je rentre à ma maison." Eric Cartman, philosophe. |
jyma
|
# Posté le 09/09/2007 à 16:13:07 |
|
bonjour Groupe : Membres |
escusé moi je ne compren rien
|
candide
|
# Posté le 07/10/2007 à 22:13:04 |
"In code we trust"![]() Groupe : Membres |
Pas mal cette nouvelle mouture de la FAQ.
Citation : Yno pour les chiffres, il me semble que ceci est portable : Code : C - Afficher / masquer les numéros de ligne
Oui, ça l'est, cf. le standard : Citation : Norme C99 5.2.1 Character sets [...] In both the source and execution basic character sets, the value of each character after 0 in the above list of decimal digits shall be one greater than the value of the previous. Comme l'a observé psychoh13 sur le forum, ici, pour les encodages ASCII ou EBCDIC, c'est même vrai pour les 16 chiffres hexadécimaux. EDIT Lien exact vers la réponse de psychoh13
Édité
le 17/11/2007 à 23:02:23
par candide
|
said78vf
|
# Posté le 22/11/2007 à 01:18:07 |
![]() Groupe : Membres |
Citation : PianoPâriss
Tient, j'ai quelque chose d'intéressant: @ edit >> ( ), ah oui, j'utilise le mot 'case' pour donner une image, je sais que ce n'est pas très correct, mais bon...Si vous avez un buffer (char []) qui contient un nombre par exemple en 'case' 12 (donc buffer[12] = LeNombreQueJeVeuxObtenirDansUnInt). Vous allez donc devoir passer buffer à sscanf() ; Ok ? Alors, vous vous dites, je dois faire: Code : C - Afficher / masquer les numéros de ligne
C'est énervant de devoir créer une chaine juste pour sscanf() non ? (oui, rappelez vous, les programmeurs sont fénéants )Et ben, voila le truc: Code : C - Afficher / masquer les numéros de ligne
Le compilo va créer une chaine, donc, pour lui ça ne change rien, mais pour nous, c'est vachement plus pratique ![]() P.S. Il me semble qu'on peut aussi modifier l'argument 2 de sscanf() pour qu'il ne prenne que à partir du 12eme caractère mais bon, je préfère mon truc. Attention, les litéraux composés sont une nouveauté de C99, tous les compilateurs ne l'implémentent pas. |
bagnthi
|
# Posté le 30/01/2008 à 19:16:11 |
|
Groupe : Membres |
merci pour vos reponses
Édité
le 31/01/2008 à 13:00:11
par bagnthi
|
boss_78
|
# Posté le 16/02/2008 à 18:45:45 |
|
Groupe : Membres |
Citation : Kevin Leonhart
[6][1] Comment créer un MMORPG ?
Je pense que ce n'est pas tout à fait exact, je vais reprendre point par point.
En gros je dirais que MMORPG!=WoW |
1337833K
|
# Posté le 14/04/2008 à 14:58:09 |
|
fgsfds Groupe : Membres |
[7][10] Comment récupérer un fichier se trouvant sur un serveur distant ?
C'est relativement compliqué, car un simple fopen() ne fonctionne pas. Vous devez employer l'API Socket de votre système, puis dialoguer avec le serveur distant dans le protocole adéquat. |
amirault.tony
|
# Posté le 17/04/2008 à 22:32:09 |
|
Vivre au jour le jour La nuit Groupe : Membres |
J'aimerai savoir s'il est possible de faire
for (i=0;i<nb;i++) { if (x[0]==y[i]); } J'ai une requête, euh... Non une quête ! |
GuilOooo
|
# Posté le 18/04/2008 à 11:22:38 |
PriPrOTtTt§!!!§![]() Groupe : Membres |
Amirault.tony, ici c'est pour les questions récurrentes fréquemment postées sur les forums. On ne poste que les couples question/réponse.
Si tu as une question particulière, à mon avis, tu devrais créer un nouveau topic pour exposer ton problème .Sinon, à priori ton code n'a pas de problème particulier, mais il ne fait absolument rien. Donc je pense qu'il ne donne pas le résultat que tu espères. Tu devrais, dans ton topic, expliquer ce à quoi tu veux parvenir en détails... |
SonOfGod
|
# Posté le 11/06/2008 à 21:58:14 |
|
Groupe : Membres |
Rectificatif , il est possible d'effacer l'ecran en C et mais de le placer à un endroit precis.
mais c'est avec le compilateur BORLAND C++. NB :avec DEV C++ impossible!!! il suffit d'utiliser la bibliotheque "conio.h" EFFACER: appeler la fonction clrscr(); afficher à un endroit preci: apeller gotoxy(c,l); qui se place devant le la fction d'affichage c=n° de colonne l=n° de ligne dc pour afficher "bonjour" à la colone 2 ligne 3 il faut faire. gotoxy(2,3);printf("bonjour"); |
GuilOooo
|
# Posté le 12/06/2008 à 12:39:10 |
PriPrOTtTt§!!!§![]() Groupe : Membres |
Citation : SonOfGod
Rectificatif , il est possible d'effacer l'ecran en C et de le placer à un endroit precis. mais c'est avec le compilateur BORLAND C++. NB :avec DEV C++ impossible!!! EDIT : le souligné est de moi. Ça va, tu sens pas trop inutile ? Dans la FAQ on a dit : Citation : Kevin Leonhart [2][3] Comment effacer la console ? En C purement standard et portable, on ne peut pas. Il faut utiliser des commandes ou des fonctions dans des bibliothèques tierces. Donc en fait tu ne rectifies rien, tu ne fait que redire la même chose en moins bien. De plus, Conio.h existe pour Dev-C++, elle y a été portée, mais par contre il faudra peut-être l'installer. Enfin, quitte à utiliser une bibliothèque tièrce pour faire ce boulot, autant en prendre une portable, ça mange pas de pain et c'est sympa pour ceux qui ont choisi un OS différent du tien.
Édité
le 12/06/2008 à 12:43:35
par GuilOooo
|
Retour au forum "Langage C" ou à la liste des forums
Vous devez être inscrit pour pouvoir poster des messages
Changer de design |
En savoir plus |
Plan du site |
Politique d'accessibilité |
Règles |
RSS tutoriels |
RSS news
Édité par Simple IT SARL :
Nous contacter
| Notre blog | Revue de presse | Publicité
Y'a plus rien à lire, faut remonter maintenant !
Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.
76 Zéros connectés |
8 requêtes |
0.0523s (0.0372s)
