[Topic unique] L'informatique (programmation, hardware ...)

Pour parler de tout ce que vous voulez qui n'est pas Pokémon (Manga, écologie, j'en passe et j'en oublie)
Avatar du membre
X260
Membre
Messages : 1334
Enregistré le : jeu. 14 avr. 2011, 19:42
Contact :

Re: [Topic unique] L'informatique (programmation, hardware .

Message par X260 » ven. 04 mai 2012, 12:04

SquallFinal a écrit :C'est parce que ton IDE lance ton programme en mode debug
le return 0 renvoie le code d'erreur 0 (en général 0 = tout va bien) et arrête ton programme, si t'es en debug il te demandera d'appuyer sur une touche.
Sans passer par le debug, ton programme s'arrêtera et se fermera directement, tu peux contourner :

Code : Tout sélectionner

#include <stdlib.h>
int main() {
[...]
system("pause");
return 0;
}
Mais ça marchera seulement sur windows, si tu veux que le résultat soit le même partout :

Code : Tout sélectionner

#include <stdio.h>
int main() {
[...]
printf("Appuyez sur une touche pour continuer\n");
getchar();
return 0;
}
(Oui, ce message date d'il y a longtemps, mais...)
Je suis en langage C, et seul le premier code fonctionne... Pour getchar() ne fonctionne pas (Windows XP) ?

[EDIT] J'ai une autre question, toujours en C... Y a-t-il un moyen de dire "si variable==caractère alors", sachant que j'ai déjà ma boucle ?
Image

Avatar du membre
Brybry
Chef des Relations Externes
Messages : 5304
Enregistré le : dim. 15 juil. 2007, 21:53
Localisation : Suisse
Contact :

Re: [Topic unique] L'informatique (programmation, hardware .

Message par Brybry » ven. 04 mai 2012, 12:22

Code : Tout sélectionner

if(variable == "toncaractère")
{
[...]
}
Et si tu veux sortir de la boucle, tu mets un break;.

Pour ton premier problème, je sais pas, ça fait longtemps que j'ai pas fait de C.

Avatar du membre
IHerdULiekMudkipZ
Membre
Messages : 776
Enregistré le : mar. 07 juil. 2009, 13:15
Localisation : ::1
Contact :

Re: [Topic unique] L'informatique (programmation, hardware .

Message par IHerdULiekMudkipZ » ven. 04 mai 2012, 13:29

X260 a écrit :Je suis en langage C, et seul le premier code fonctionne... Pour getchar() ne fonctionne pas (Windows XP) ?
Tu utilises quel compilateur ?

Essaye avec fgetc(stdin) sinon.
Image

« Au commencement, Dieu créa le chat à son image. Et bien entendu, il trouva que c'était bien. Et c'était bien, d'ailleurs. Mais le chat était paresseux. Il ne voulait rien faire. Alors, plus tard, après quelques millénaires, Dieu créa l'homme. »

Avatar du membre
X260
Membre
Messages : 1334
Enregistré le : jeu. 14 avr. 2011, 19:42
Contact :

Re: [Topic unique] L'informatique (programmation, hardware .

Message par X260 » ven. 04 mai 2012, 16:43

Brybry a écrit :

Code : Tout sélectionner

if(variable == "toncaractère")
{
[...]
}
Et si tu veux sortir de la boucle, tu mets un break;.

Pour ton premier problème, je sais pas, ça fait longtemps que j'ai pas fait de C.
Je veut dire que si (avec un scanf), la personne rentre un caractère autre qu'on chiffre, la boucle s'active.
Un truc du style :

Code : Tout sélectionner

int an=0
do
{
[...]
}
while an=0 || an > 10 || an="un_caractère_autre_qu'un_chiffre"
IHerdULiekMudkipZ a écrit :
X260 a écrit :Je suis en langage C, et seul le premier code fonctionne... Pour getchar() ne fonctionne pas (Windows XP) ?
Tu utilises quel compilateur&nbsp;?

Essaye avec fgetc(stdin) sinon.
J'utilise Code::Blocks. Sinon, qu'est ce que "fgetc(stdin)" ?
Image

Avatar du membre
IHerdULiekMudkipZ
Membre
Messages : 776
Enregistré le : mar. 07 juil. 2009, 13:15
Localisation : ::1
Contact :

Re: [Topic unique] L'informatique (programmation, hardware .

Message par IHerdULiekMudkipZ » ven. 04 mai 2012, 16:47

Code::Blocks c'est un IDE, pas un compilateur, mais bon. %)
J'imagine que tu utilises le gcc de MinGW.

Sinon, t'as essayé avec fgetc ?
Image

« Au commencement, Dieu créa le chat à son image. Et bien entendu, il trouva que c'était bien. Et c'était bien, d'ailleurs. Mais le chat était paresseux. Il ne voulait rien faire. Alors, plus tard, après quelques millénaires, Dieu créa l'homme. »

Avatar du membre
X260
Membre
Messages : 1334
Enregistré le : jeu. 14 avr. 2011, 19:42
Contact :

Re: [Topic unique] L'informatique (programmation, hardware .

Message par X260 » ven. 04 mai 2012, 17:21

Oui, mais ça ne fonctionne pas non-plus...
Image

Avatar du membre
IHerdULiekMudkipZ
Membre
Messages : 776
Enregistré le : mar. 07 juil. 2009, 13:15
Localisation : ::1
Contact :

Re: [Topic unique] L'informatique (programmation, hardware .

Message par IHerdULiekMudkipZ » ven. 04 mai 2012, 17:41

J'ai MinGW mais pas Code::Blocks sur mon ordi, et l'exemple de SquallFinal fonctionne très bien avec la commande :

Code : Tout sélectionner

mingw32-gcc.exe test.c -o test.exe && text.exe
Alors soit c'est Code::Blocks qui foire, soit ton code.

Tu as bien inclus <stdio.h> au moins ? :huhu:
Image

« Au commencement, Dieu créa le chat à son image. Et bien entendu, il trouva que c'était bien. Et c'était bien, d'ailleurs. Mais le chat était paresseux. Il ne voulait rien faire. Alors, plus tard, après quelques millénaires, Dieu créa l'homme. »

Avatar du membre
X260
Membre
Messages : 1334
Enregistré le : jeu. 14 avr. 2011, 19:42
Contact :

Re: [Topic unique] L'informatique (programmation, hardware .

Message par X260 » ven. 04 mai 2012, 19:35

IHerdULiekMudkipZ a écrit :J'ai MinGW mais pas Code::Blocks sur mon ordi, et l'exemple de SquallFinal fonctionne très bien avec la commande :

Code : Tout sélectionner

mingw32-gcc.exe test.c -o test.exe && text.exe
Alors soit c'est Code::Blocks qui foire, soit ton code.

Tu as bien inclus <stdio.h> au moins ? :huhu:
<stdio.h> est bien inclus.
IHerdULiekMudkipZ a écrit :

Code : Tout sélectionner

mingw32-gcc.exe test.c -o test.exe && text.exe
??? C'est une commande ça ?

Sinon, voici le code intégralement (attention, c'est assez long) :
Spoiler :

Code : Tout sélectionner

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int an=0, mois=0, jour=0, da=0, dm=0, d=0, th=0, uh=0, tm=0, um=0, v=0, x=0, y=0, seed=0;

    do
    {
    printf("\n===Choix de l'annee===\n\n");
    printf("1.2011\n");
    printf("2.2012\n");
    printf("3.2013\n");
    printf("4.2014\n");
    printf("5.2015\n");
    printf("6.2016\n");
    printf("7.2017\n");
    printf("8.2018\n");
    printf("9.2019\n");
    printf("10.2020\n");
    scanf("%d", &an);
    printf("\n");

    switch(an)
    {
        case 1:
            printf("Choix : 2011\n"); //Affichage de l'année choisie.
            da = 365*10+2; //Opération non-affiché qui sera réutiliser ensuite avec le mois, puis le jour et enfin, avec l'heure.
            break;
        case 2:
            printf("Choix : 2012\n\n"); //Même description que pour case 1.
            da = 365*11+2;
            break;
        case 3:
            printf("Choix : 2013\n\n");
            da = 365*12+3;
            break;
        case 4:
            printf("Choix : 2014\n\n");
            da = 365*13+3;
            break;
        case 5:
            printf("Choix : 2015\n\n");
            da = 365*14+3;
            break;
        case 6:
            printf("Choix : 2016\n\n");
            da = 365*15+3;
            break;
        case 7:
            printf("Choix : 2017\n\n");
            da = 365*16+4;
            break;
        case 8:
            printf("Choix : 2018\n\n");
            da = 365*17+4;
            break;
        case 9:
            printf("Choix : 2019\n\n");
            da = 365*18+4;
            break;
        case 10:
            printf("Choix : 2020\n\n");
            da = 365*19+4;
            break;
        default: //Dans la version finale, une boucle fera re-commencer pour re-selectionner un bon chiffre !
            printf(" Veilleuz saisir un numeros entre 1 et 10.\n\n"); //Message d'erreur
            break;
    }
    } while (an == 0 || an > 10);



    do
    {
        printf("\n\n\n===Choix du mois===\n\n");
    printf("1.Janvier\n");
    printf("2.Fevrier\n");
    printf("3.Mars\n");
    printf("4.Avril\n");
    printf("5.Mai\n");
    printf("6.Juin\n");
    printf("7.Juillet\n");
    printf("8.Aout\n");
    printf("9.Septembre\n");
    printf("10.Octobre\n");
    printf("11.Novembre\n");
    printf("12.Decembre\n");
    scanf("%d", &mois);
    printf("\n");

    switch(mois)
    {
        case 1:
            printf("Choix : Janvier\n\n");
            dm = 0;
            break;
        case 2:
            printf("Choix : Fevrier\n\n");
            dm = 31;
            break;
        case 3:
            printf("Choix : Mars\n\n");
            dm = 31+28;
            break;
        case 4:
            printf("Choix : Avril\n\n");
            dm = 31+28+31;
            break;
        case 5:
            printf("Choix : Mai\n\n");
            dm = 31+28+31+30;
            break;
        case 6:
            printf("Choix : Juin\n\n");
            dm = 31+28+31+30+31;
            break;
        case 7:
            printf("Choix : Juillet\n\n");
            dm = 31+28+31+30+31+30;
            break;
        case 8:
            printf("Choix : Aout\n\n");
            dm = 31+28+31+30+31+30+31;
            break;
        case 9:
            printf("Choix : Septembre\n\n");
            dm = 31+28+31+30+31+30+31+31;
            break;
        case 10:
            printf("Choix : Octobre\n\n");
            dm = 31+28+31+30+31+30+31+31+30;
            break;
        case 11:
            printf("Choix : Novembre\n\n");
            dm = 31+28+31+30+31+30+31+31+30+31;
            break;
        case 12:
            printf("Choix : Décembre\n\n");
            dm = 31+28+31+30+31+30+31+31+30+31+30;
            break;
        default:
            printf("Entrez un numeros en 1 et 12, s'il vous plaît\n\n");
            break;

    }
    } while (mois == 0 || mois > 12);

    do
    {
    printf("\n===Choix du jour===\n\n");
    printf("Le combien sommes nous ?\n");
    scanf("%d", &jour);
    if (jour <= 31 && jour != 0)
    {
        printf("Nous sommes donc le %d/%d.\n\n", jour, mois);
    }
    else
    {
        printf("Un jour ne peu pas etre plus grand que 31 ou plus petit que 1 !\n\n");
    }

    } while (jour == 0 || jour > 31);

    d = da + dm + jour;

    do
    {
        printf("===Choix de la dizaine de l'heure===\n\n");
        printf("Entrez le chiffre des dizaine de l'heure.\n");
        scanf("%d", &th);
        if (th <= 2)
        {
            printf("Bien. Le chiffre des dizaines de l'heure est %d \n\n", th);
        }
        else
        {
            printf("Si vous reflechissez, le chiffre demande ne peut etre compris qu'entre 0 et 2 !\n");
        }
    } while (th>2);

    do
    {
        printf("\n===Choix de l'unite de l'heure===\n\n");
        printf("Entrez le chiffre des unites de l'heure.\n");
        scanf("%d", &uh);
        if (th <= 9)
        {
            printf("Bien. Le chiffre des unites de l'heure est %d \n\n", uh);
        }
        else
        {
            printf("Si vous reflechissez, le chiffre demande ne peut etre compris qu'entre 0 et 9 !\n");
        }
    } while (th>9);

    do
    {
        printf("\n===Choix de la dizaine des minutes===\n\n");
        printf("Entrez le chiffre des dizaines des minutes.\n");
        scanf("%d", &tm);
        if (th <= 5)
        {
            printf("Bien. Le chiffre des dizaines des minutes est %d \n\n", tm);
        }
        else
        {
            printf("Si vous reflechissez, le chiffre demande ne peut etre compris qu'entre 0 et 5 !\n");
        }
    } while (th>5);

    do
    {
        printf("\n===Choix de l'unite des minutes===\n\n");
        printf("Entrez le chiffre des unites des minutes.\n");
        scanf("%d", &um);
        if (th <= 9)
        {
            printf("Bien. Le chiffre des unites des minutes est %d \n\n", um);
        }
        else
        {
            printf("Si vous reflechissez, le chiffre demande ne peut etre compris qu'entre 0 et 9 !\n");
        }
    } while (th>9);

    v=1440*d+960*th+60*uh+16*tm+um;
    x=v/65536;
    y=v%65536; // %=mod

    printf("x=%d soit 0x%x \n", x, x);
    printf("y=%d soit 0x%x \n", y, y);
    printf("NB : Ox signifique que les carateres qui suivent forment un code en hexadecimal\n\n\n");
    printf("\n===Calcul final de la seed===\n\n");
    seed=x^y;
    printf("La seed est 0x%x \n\n\n\n\n", seed);// Result
    printf("Programme integralement par X260\n\n"); //Copyright

    system("pause");

    return 0;
}
[EDIT] Si ça peut être pratique mon MSN : shasseur-x260@hotmail.fr.
[EDIT2] J'ai trouver : il faut mettre :

Code : Tout sélectionner

[...]
printf("Appuyer sur un touche pour continuer...");
getchar();
getchar();
printf("rien"); //Ceci n'apparaît pas

return 0
Chouette !
Plus que mon premier soucis :hum:...
Image

Avatar du membre
IHerdULiekMudkipZ
Membre
Messages : 776
Enregistré le : mar. 07 juil. 2009, 13:15
Localisation : ::1
Contact :

Re: [Topic unique] L'informatique (programmation, hardware .

Message par IHerdULiekMudkipZ » ven. 04 mai 2012, 20:45

J'ai essayé avec ton programme, et en effet ça fait comme si getchar() n'était pas là, alors que ça fonctionne bien dans un programme contenant seulement cette instruction.

Du coup je me suis dit que c'était sans soute une histoire de buffer, et en effet c'est bien ça.
Le retour à la ligne que tu entres pour valider l'unité des minutes reste dans le buffer, donc c'est ça qui est lu par getchar().
Il suffit de vider le buffer de l'entrée standard avec fflush(stdin) pour que ça marche.

Code : Tout sélectionner

printf("Appuyez sur entree pour continuer...\n");
fflush(stdin);
getchar();
Le seul problème c'est qu'il faut appuyer sur entrée.
Tu peux remplacer getchar() par getch() pour que ça fonctionne avec n'importe quelle touche, mais apparemment c'est une fonction non-standard du C.

Sinon, pour comparer des caractères, il faut utiliser les quotes simples et non les doubles.
Par exemple :

Code : Tout sélectionner

if (getchar() == 'a') {
  //code
}
X260 a écrit :
IHerdULiekMudkipZ a écrit :

Code : Tout sélectionner

mingw32-gcc.exe test.c -o test.exe && text.exe
??? C'est une commande ça ?
Bah vu que j'ai pas installé Code::Blocks, je compile en console. :sisi:

EDIT : Ah, j'avais pas vu ton 2ème EDIT.
Mais c'est assez moche ta solution vu que le 1er getchar() va "manger" seulement un caractère dans le buffer.
Si par hasard il en restait d'autres, tu reviendrais à ton problème précédent.
Image

« Au commencement, Dieu créa le chat à son image. Et bien entendu, il trouva que c'était bien. Et c'était bien, d'ailleurs. Mais le chat était paresseux. Il ne voulait rien faire. Alors, plus tard, après quelques millénaires, Dieu créa l'homme. »

Avatar du membre
X260
Membre
Messages : 1334
Enregistré le : jeu. 14 avr. 2011, 19:42
Contact :

Re: [Topic unique] L'informatique (programmation, hardware .

Message par X260 » ven. 04 mai 2012, 22:02

Merci énormément !!!
Seul truc :

Code : Tout sélectionner

if (getchar() == 'a'){
//Code
}
Je dois le recopier pour toute les touches ? De plus, je tiens à le placer dans un boucle do...while, puisqu'elle est déjà présente dans pon code.
Image

Avatar du membre
IHerdULiekMudkipZ
Membre
Messages : 776
Enregistré le : mar. 07 juil. 2009, 13:15
Localisation : ::1
Contact :

Re: [Topic unique] L'informatique (programmation, hardware .

Message par IHerdULiekMudkipZ » ven. 04 mai 2012, 22:10

C'était un code générique, ça ne fonctionnerait pas dans ton cas vu que tu utilises scanf(), qui convertit les valeurs en entier directement.
Le problème c'est qu'il met 0 pour les valeurs erronées et qu'il continue comme si de rien n'était.

À vrai dire, je ne fais pas beaucoup de C d'habitude alors je ne sais pas vraiment comment faire ça.
Mais à voir ton programme, je trouve que c'est très long et pas bien optimisé.
Je veux dire, demander les valeurs chiffre par chiffre, c'est pas forcément la meilleure façon de faire.

Tu as pensé aux expressions régulières ?
Il me semble que c'est dans <regex.h>.

Tu pourrais demander la date d'une traite, de même pour l'heure, et également savoir si les valeurs sont correctes ou non.
Image

« Au commencement, Dieu créa le chat à son image. Et bien entendu, il trouva que c'était bien. Et c'était bien, d'ailleurs. Mais le chat était paresseux. Il ne voulait rien faire. Alors, plus tard, après quelques millénaires, Dieu créa l'homme. »

Avatar du membre
X260
Membre
Messages : 1334
Enregistré le : jeu. 14 avr. 2011, 19:42
Contact :

Re: [Topic unique] L'informatique (programmation, hardware .

Message par X260 » ven. 04 mai 2012, 22:36

Bein... j'essaie, mais je ne sais pas comment faire. Je débute tout juste le C, en réalité. Pour le calcul qui suit il me faut chaque nombre demandé. Il y aurait un moyen de dire que la variable x vaut le deuxième chiffre rentré ?
Image

Avatar du membre
IHerdULiekMudkipZ
Membre
Messages : 776
Enregistré le : mar. 07 juil. 2009, 13:15
Localisation : ::1
Contact :

Re: [Topic unique] L'informatique (programmation, hardware .

Message par IHerdULiekMudkipZ » ven. 04 mai 2012, 22:38

Avec les expressions régulières, oui, c'est possible.
J'en ai jamais fait en C mais il y a des tonnes de tutos sur le Net.
Image

« Au commencement, Dieu créa le chat à son image. Et bien entendu, il trouva que c'était bien. Et c'était bien, d'ailleurs. Mais le chat était paresseux. Il ne voulait rien faire. Alors, plus tard, après quelques millénaires, Dieu créa l'homme. »

Avatar du membre
X260
Membre
Messages : 1334
Enregistré le : jeu. 14 avr. 2011, 19:42
Contact :

Re: [Topic unique] L'informatique (programmation, hardware .

Message par X260 » ven. 04 mai 2012, 23:04

Hum, je vais chercher... Si je ne trouve pas je ferai appelle à vous ! Merci !
[EDIT] Je ne trouve pas...
Image

Avatar du membre
Bastien
Membre
Messages : 8562
Enregistré le : sam. 03 nov. 2007, 05:27
Contact :

Re: [Topic unique] L'informatique (programmation, hardware .

Message par Bastien » ven. 11 mai 2012, 22:37

Connaitriez vous un logiciel Windows qui permette de prendre une capture de son écran, mais en mouvement ?
J'aimerais me lancer dans le test on-line de vieux jeux.

Avatar du membre
Oni-Link
Chef des Newseurs
Messages : 6577
Enregistré le : mar. 01 juin 2010, 18:11

Re: [Topic unique] L'informatique (programmation, hardware .

Message par Oni-Link » ven. 11 mai 2012, 22:38

Une vidéo tu veux dire ?

Avatar du membre
IHerdULiekMudkipZ
Membre
Messages : 776
Enregistré le : mar. 07 juil. 2009, 13:15
Localisation : ::1
Contact :

Re: [Topic unique] L'informatique (programmation, hardware .

Message par IHerdULiekMudkipZ » ven. 11 mai 2012, 23:00

Fraps, HyperCam…
Il en existe des centaines.

Cherche « screen video capture ».
Image

« Au commencement, Dieu créa le chat à son image. Et bien entendu, il trouva que c'était bien. Et c'était bien, d'ailleurs. Mais le chat était paresseux. Il ne voulait rien faire. Alors, plus tard, après quelques millénaires, Dieu créa l'homme. »

Enima
Membre
Messages : 1182
Enregistré le : dim. 06 déc. 2009, 17:01
Localisation : L'arabe strait

Re: [Topic unique] L'informatique (programmation, hardware .

Message par Enima » sam. 12 mai 2012, 19:58

Achètes Fraps et si tu ne peux tu te le procureras d'un autre façon. %)
Demande moi par mp je te le passerai :)

Avatar du membre
Bastien
Membre
Messages : 8562
Enregistré le : sam. 03 nov. 2007, 05:27
Contact :

Re: [Topic unique] L'informatique (programmation, hardware .

Message par Bastien » sam. 12 mai 2012, 22:30

HyperCam je connaissais mais la qualité est mauvaise et en plus il y'a le nom du logiciel inscrit sur toutes les captures.

Avatar du membre
Oni-Link
Chef des Newseurs
Messages : 6577
Enregistré le : mar. 01 juin 2010, 18:11

Re: [Topic unique] L'informatique (programmation, hardware .

Message par Oni-Link » sam. 12 mai 2012, 23:36

Tu peux enlever le logo dans les Options si je me souviens bien.
Sinon, Camstudio.

Répondre