IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Modification de echo


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Modification de echo
    Bonjour,
    je suis étudiant en informatique et dans le contexte de mes cours on m'a demandé de tout d'abord créer une commande echo en C qui s'arrête lorsqu'elle lie le nombre 42 et j'ai fait cela (le code est passé donc pour ça c'est bon) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void) {
    	int v;
    	while (fscanf(stdin, "%d", &v) != EOF) {
    		if (v == 42) {
    			break;
    		}
     
    		fprintf(stdout, "%d\n", v);
    	}
    	return EXIT_SUCCESS;
    }
    Mais maintenant on me demande d'arrêterez le traitement quand la somme des trois prochains nombres est égale à 42, et j'ai beau réfléchir je ne vois pas comment faire... J'ai essayé de stocker en créant un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int main(void) {
    	int tab[3] = { 0 };
    	fscanf(stdin, "%d", &tab[0]);
    	fscanf(stdin, "%d", &tab[1]);
    	while (fscanf(stdin, "%d", &tab[2]) != EOF) {
    		if (tab[0]+tab[1]+tab[2] == 42) { break; }
    		fprintf(stdout, "%d\n", tab[0]); 
    		tab[0] = tab[1];
    		tab[1] = tab[2];
    	}
    	system("PAUSE");
    	return EXIT_SUCCESS;
    }
    mais ce code arrête le traitement trop tôt si on ne rencontre pas le cas où la somme des trois prochains nombre est égale à 42, j'ai essayé avec des fseek, rewind, en faisant 3 fois fscanf sur 3 variables différente puis en faisant 2 fseek pour revenir au bon endroit, mais je n'ai pas très bien compris ce qu'il se passait et ça ne marchait pas, ça n'affichait que le premier nombre entrée...
    J'ai l'impression que la solution est simple car ce n'est pas censé être un exercice difficile, mais j'ai beau cherché je ne trouve rien après plusieurs heures à chercher... Est-ce que vous pourriez m'aider ? Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Agigas Voir le message
    Mais maintenant on me demande d'arrêterez le traitement quand la somme des trois prochains nombres est égale à 42, et j'ai beau réfléchir je ne vois pas comment faire
    Pourtant tu avais presque trouvé !!!
    Enlève les deux premier fscanf() totalement inutiles, et affiche tab[2] au lieu de tab[0].

    Citation Envoyé par Agigas Voir le message
    j'ai essayé avec des fseek, rewind, en faisant 3 fois fscanf sur 3 variables différente puis en faisant 2 fseek pour revenir au bon endroit, mais je n'ai pas très bien compris ce qu'il se passait et ça ne marchait pas,
    Interdit de faire rewind() ou fseek() sur stdin/stdout/stderr. Ce ne sont pas des périphériques adressables. (de même interdit aussi sur les bandes et autres supports de ce type). Et franchement tu es parti dans des profondeurs abyssales de complexité inutile.

    Citation Envoyé par Agigas Voir le message
    je ne trouve rien après plusieurs heures à chercher...
    N'exagère quand-même pas !!! Personne ne croira que tu es resté plusieurs "heures" à chercher...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour, merci pour ta réponse,
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Pourtant tu avais presque trouvé !!!
    Enlève les deux premier fscanf() totalement inutiles, et affiche tab[2] au lieu de tab[0].
    J'ai essayé mais ça ne marche pas, il faut que le programme s'arrête avant le nombre qui a pour somme avec ses 2 suivants 42, par exemple :
    Input:
    1 2 88 42 99 1 1 40
    Output:
    1 2 88 42 99
    Alors qu'en enlevant les 2 premiers scanf et en affichant tab[2] on a :
    Output :
    1 2 88 42 99 1 1
    Est-ce que tu saurais comme faire pour s'arrêter avant ?


    Citation Envoyé par Sve@r Voir le message
    Interdit de faire rewind() ou fseek() sur stdin/stdout/stderr. Ce ne sont pas des périphériques adressables. (de même interdit aussi sur les bandes et autres supports de ce type). Et franchement tu es parti dans des profondeurs abyssales de complexité inutile.
    C'est ce que je me disais concernant rewind et fseek, mais j'étais désespéré...


    Citation Envoyé par Sve@r Voir le message
    N'exagère quand-même pas !!! Personne ne croira que tu es resté plusieurs "heures" à chercher...
    Tant pis si on ne me croit pas, mais j'ai bien passé 2h Samedi à chercher et 2h cet après-midi, à chercher sur internet des solution, tester pleins de choses différentes dans l'espoir que quelque chose marche...

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Et si tu entres 1 1 40 tu n'affiches rien ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Et si tu entres 1 1 40 tu n'affiches rien ?
    Je suppose que oui, je n'ai comme données que l'énoncé que j'ai mis dans mon premier message et l'input/output que j'ai mis dans mon deuxième message.

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Agigas Voir le message
    Alors qu'en enlevant les 2 premiers scanf et en affichant tab[2] on a :
    Output :
    1 2 88 42 99 1 1
    Oui c'est ça. Quand on entre 1 1 40, on a la somme des 3 derniers qui fait 42 donc il s'arrête. Mais bien entendu il ne s'arrête que quand on a entré le nombre final qui totalise 42 avec les deux avant-derniers. C'est bien dans ce sens que j'ai vu l'exo.

    Citation Envoyé par Agigas Voir le message
    il faut que le programme s'arrête avant le nombre qui a pour somme avec ses 2 suivants 42
    Mais c'est complètement con comme exo !!! Comme dit Bousk, tu entres 1 1 40 ça ne sort rien ? Super la nouvelle commandeecho
    En tout cas, la solution reste à peu près la même: faut stocker un historique de 4 nombres et afficher le nb[0] tandis qu'on évalue la somme de nb[1], nb[2] et nb[3]...

    Citation Envoyé par Agigas Voir le message
    Tant pis si on ne me croit pas, mais j'ai bien passé 2h Samedi à chercher et 2h cet après-midi, à chercher sur internet des solution, tester pleins de choses différentes dans l'espoir que quelque chose marche...
    Des solutions sur le net ? Oui pourquoi pas. Si tu as la chance qu'un autre internaute a eu un truc aussi débile à coder et qu'il l'a posté...
    Sans déconner. Quand on a un truc aussi atypique, le net ne sert à rien. La seule solution est de réfléchir.

    Bon je te donne la solution parce que cet exo m'énerve tellement il sert à rien
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>
     
    int main(void) {
    	int tab[4] = { 0 };
    	size_t i;
    	while (fscanf(stdin, "%d", &tab[3]) != EOF) {
    		fprintf(stdout, "tab=%d\n", tab[0]); 
    		if (tab[1]+tab[2]+tab[3] == 42) break;
    		for (i=0; i < 3; i++) tab[i]=tab[i+1];
    	}
    	return 0;
    }
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Des solutions sur le net ? Oui pourquoi pas. Si tu as la chance qu'un autre internaute a eu un truc aussi débile à coder et qu'il l'a posté...
    Sans déconner. Quand on a un truc aussi atypique, le net ne sert à rien. La seule solution est de réfléchir.
    Pas des solutions dans ce sens, des solution dans des cours de C, voir si il y avait une commande que je ne connaissais pas qui permettrais de faire cet exercice plus facilement.

    Merci mais ce code ne marche pas non plus, si on le lance par exemple avec 2 nombres ça ne les renvoi pas.

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Agigas Voir le message
    Merci mais ce code ne marche pas non plus, si on le lance par exemple avec 2 nombres ça ne les renvoi pas.
    Tu ne veux pas afficher les nombres s'ils se somment à 42 mais tu veux afficher 2 nombres. Ton énoncé n'a soit aucun sens soit tu l'as mal compris.
    Tu peux pas demander d'aller à gauche et te plaindre quand on va pas à droite.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Si il n'y a que 2 nombre logiquement la somme des 3 prochains nombres pour ces nombre ne peut pas être égale à 42 (vu que ces nombres n'ont pas 2 nombres qui les suivent) du coup il faudrait qu'ils s'affichent...
    Nom : Capture.JPG
Affichages : 315
Taille : 35,4 Ko
    Je n'ai rien de plus que ça comme énoncé. J'ai essayé de rendre la solution que vous m'avez proposé au cas où j'irai trop loin en voulant que si il n'y a que 2 chiffres ils soient pris en charge, et le "judge" m'a mis "wrong answer".

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    L'input est donné au programme ou entré par l'utilisateur ? Ça change tout.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  11. #11
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    @Bousk: le programme doit être testé automatiquement avec des jeux d'entrées mais rien ne dit que l'exemple en fasse partie.

    C'est vraiment pas clair en tout les cas. Il nous faudrait au moins la séquence d'évènements qui a abouti à l'exemple..

    Sans plus de précision je dirais au doigt mouillé que le programme n'émet que lorsque les données ne peuvent aboutir à la condition d'arrêt : dernier nombre inférieur à 42. Soit avec l'exemple considéré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    stdin : 1
    stdout: 
    --
    stdin : 1 2
    stdout: 
    --
    stdin : 1 2 88
    stdout: 1 2 88
    --
    stdin : 1 2 88 42
    stdout: 1 2 88 42
    --
    stdin : 1 2 88 42 99
    stdout: 1 2 88 42 99
    --
    stdin : 1 2 88 42 99 1
    stdout: 1 2 88 42 99
    --
    stdin : 1 2 88 42 99 1 1
    stdout: 1 2 88 42 99
    --
    stdin : 1 2 88 42 99 1 1 40
    stdout: 1 2 88 42 99

  12. #12
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Matt_Houston Voir le message
    Sans plus de précision je dirais au doigt mouillé que le programme n'émet que lorsque les données ne peuvent aboutir à la condition d'arrêt : dernier nombre inférieur à 42. Soit avec l'exemple considéré
    Si c'est vraiment ça, alors je verrais une espèce de buffer de 3 caractères qu'on remplit au fur et à mesure. Et dès que la certitude est atteinte ou que le buffer est plein, le buffer est purgé à l'écran. Bref simuler une surcouche de stdout quoi...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Matt_Houston Voir le message
    Sans plus de précision je dirais au doigt mouillé que le programme n'émet que lorsque les données ne peuvent aboutir à la condition d'arrêt : dernier nombre inférieur à 42.
    Je suis dans ton camp, mais

    Citation Envoyé par Matt_Houston Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    stdin : 1 2
    stdout: 
    --
    Il dit que c'est faux
    Citation Envoyé par Agigas Voir le message
    Merci mais ce code ne marche pas non plus, si on le lance par exemple avec 2 nombres ça ne les renvoi pas.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  14. #14
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Je suis dans ton camp, mais...
    Tu sais que dès qu'on fait intervenir la conjonction "mais", tout ce qui a été dit avant est considéré comme nul et non avenu...


    Citation Envoyé par Bousk Voir le message
    Il dit que c'est faux
    Ouaip. Encore un truc avec un cahier des charges bien établi quoi...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  15. #15
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    On parle bien ici de deux nombres suivis d'EOF (fin du jeu d'entrée) ? Alors il suffit d'ajouter la prise en compte d'EOF à la condition d'arrêt et de vider le contenu du buffer le cas échéant, non ?

  16. #16
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Dans ce cas, ça t'oblige alors à gérer un buffer de taille virtuellement illimitée pour pouvoir stocker tout ce qui se trouve entre le début de la saisie et EOF...

    Bon, admettons. Voilà ce que je propose
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    #include <stdio.h>
    #include <stdlib.h>
     
    #define SZ_ALLOC			(10)
     
    typedef struct {
    	int *tab;
    	size_t nb;
    	size_t sz;
    } t_buffer;
     
    void init_buffer(t_buffer*, int);
    void saisie_buffer(t_buffer*);
    void append_buffer(t_buffer*, int);
    void debug_buffer(t_buffer*, int);
    void affich_buffer(t_buffer*, int, int);
    int sum_buffer(t_buffer*, size_t, int);
     
    // Initialisation buffer => tout à 0
    void init_buffer(t_buffer *b, int f) {
    	if (f) free(b->tab);
    	b->tab=NULL;
    	b->nb=0;
    	b->sz=0;
    }
     
    // Saisie en boucle de nombres dans buffer => fin sur CTRL-D
    void saisie_buffer(t_buffer *b) {
    	int n;
     
    	fputs("Input:\n", stdout);
    	while (fscanf(stdin, "%d", &n) != EOF)
    		append_buffer(b, n);
    }
     
    // Ajout d'un nombre dans le buffer - Gestion de la mémoire
    void append_buffer(t_buffer *b, int n) {
    	if (b->nb >= b->sz) {
    		b->sz+=SZ_ALLOC;
    		b->tab=realloc(b->tab, b->sz * sizeof(*b->tab));
    	}
    	b->tab[b->nb]=n;
    	b->nb++;
    }
     
    // Affichage débugging du buffer
    void debug_buffer(t_buffer *b, int plage) {
    	int *pt;
    	size_t i;
    	printf("buffer nb=%lu, buffer alloc=%lu\n", b->nb, b->sz);
    	for (i=0, pt=b->tab; i < b->nb; i++, pt++)
    		printf("buffer[%lu]=%d (sum=%d)\n", i, *pt, sum_buffer(b, i, plage));
    }
     
    // Affichage normal du buffer - Gestion de la limite spécifique
    void affich_buffer(t_buffer *b, int plage, int eof) {
    	int *pt;
    	size_t i;
    	fputs("\nOutput:\n", stdout);
    	for (i=0, pt=b->tab; i < b->nb && sum_buffer(b, i, plage) != eof; i++, pt++)
    		printf("%d\n", *pt);
    }
     
    // Somme du buffer sur une plage spécifique à partir d'une position
    int sum_buffer(t_buffer *b, size_t pos, int plage) {
    	int s;
    	int *pt;
    	size_t i;
     
    	// La plage prend la valeur de l'indice final
    	plage+=pos;
     
    	// Si l'indice final dépasse le nb de valeurs
    	if (plage > b->nb) {
    		// La somme ne se fera pas (à commenter si c'est pas demandé)
    		return 0;
    	}
     
    	s=0;
    	for (i=pos, pt=b->tab + pos; i < plage && i < b->nb; i++, pt++)
    		s+=(*pt);
    	return s;
    }
     
    int main(void) {
    	t_buffer buffer;
     
    	init_buffer(&buffer, 0);
    	saisie_buffer(&buffer);
    	//debug_buffer(&buffer, 3);
    	affich_buffer(&buffer, 3, 42);
    	init_buffer(&buffer, 1);
    	return 0;
    }

    Elle répond parfaitement à l'exemple input/output tel que montré... et fonctionne aussi si on n'entre que 1 ou 2 nombres qui ne somment pas 42. En fait, elle affiche tout jusqu'à tomber sur 42 en totalisant 3 nombres de l'input et si c'est pas le cas, continue jusqu'à la fin de l'input. Et tout est paramétrable (fin à 42 ou 125, somme des 3 suivants ou 300, etc...)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  17. #17
    Nouveau Candidat au Club
    Homme Profil pro
    Employé
    Inscrit en
    Février 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Employé
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2019
    Messages : 1
    Points : 0
    Points
    0
    Par défaut chez moi ça marche : echo modifié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void) {
    	int v1,v2,v3;
    	int somme;
    	while (fscanf(stdin, "%d %d %d", &v1,&v2,&v3) != EOF) {
    	somme=v1+v2+v3;
    		if (somme == 42) {
    			break;
    		}
     
    		fprintf(stdout, "%d\n", somme);
    	}
    	return EXIT_SUCCESS;
    }
    Fichiers attachés Fichiers attachés
    • Type de fichier : c echo.c (255 octets, 22 affichages)

  18. #18
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par francknemeghaire Voir le message
    chez moi ça marche
    Oui ça marche mais ça ne correspond pas à ce qui est demandé. Alors la prochaine fois tu lis le topic avant de te lancer à pondre un code que n'importe qui aurait pondu avant toi si le truc demandé avait été aussi simple que de faire saisir 3 nombres et afficher leur somme...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur lors de modification d'une table
    Par seb.49 dans le forum SQL
    Réponses: 11
    Dernier message: 13/01/2003, 17h16
  2. [VB6] modification de menu
    Par rikko23 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/11/2002, 21h30
  3. [] Datagrid vide après modification des propriétés
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/09/2002, 16h37
  4. Modification de l'évènement OnClick
    Par MrJéjé dans le forum C++Builder
    Réponses: 9
    Dernier message: 22/08/2002, 12h52
  5. Réponses: 11
    Dernier message: 23/07/2002, 14h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo