Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exercices pour débutants en C

Au menu : zSommeChiffres (nombres, algo)

15 octobre 2008 à 20:05:19

C'est marqué dans le premier post. ;) Si tu veux montrer tes résultats, tu peux envoyer une MP à réponse. Comme ça, je pourrais te conseiller sur tel ou tel point et lors de la correction, que je ferais sur ce topic, je "sélectionnerais" si possible un code particulièrement remarquable qu'un participant m'aura envoyé (avec explications) à titre d'exemple et bien entendu, je posterais ma version du code.

Si vous rencontrez des difficultés, c'est justement ici que vous pourrez en parler. :)
  • Partager sur Facebook
  • Partager sur Twitter
15 octobre 2008 à 20:08:06

Au fait crys', je précise que j'ai envoyé l'exo à réponse ;) .
  • Partager sur Facebook
  • Partager sur Twitter
15 octobre 2008 à 20:09:07

Merci pour ta participation. Mais il est inutile de le signaler, je vérifie de temps en temps. ;)
  • Partager sur Facebook
  • Partager sur Twitter
15 octobre 2008 à 20:10:48

Ok, et sinon, soit faire + d'exercices par moi, soit en faire des + difficiles ;) .
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
15 octobre 2008 à 20:12:20

oh ! je ne sais plus lire :(
  • Partager sur Facebook
  • Partager sur Twitter
15 octobre 2008 à 20:19:33

Très bonne initiative ! Et pourvu que ton topic ait du succès. Personnellement j'attends la suite, celui là était un peu facile (juste une application du tuto de m@teo21, pas trop de réflexion) (et désolé si je donne l'impression de me vanter ce n'est pas le cas!).
Enfin tout ça pour te dire aussi que tu devrais en haut marquer la difficulté de l'exo, et faire trois exos par mois (je veux bien t'aider si tu veut): un facile, un intermédiaire et un difficile
  • Partager sur Facebook
  • Partager sur Twitter
15 octobre 2008 à 20:23:35

Ton idée de niveau de difficulté est intéressante, je vais bien y réfléchir. Mais au départ, j'ai ouvert ce topic pour les vrais zér0s vraiment débutant qui doivent s'entraîner avec les notions de base. La manipulation des fichiers n'est pas aussi évidente pour un débutant que pour toi par exemple. Par contre, je n'ai rien contre le fait de donner des exercices qui demandent un peu plus de réfléxion mais certains débutants ne pourront pas les faire.
  • Partager sur Facebook
  • Partager sur Twitter
15 octobre 2008 à 20:30:03

C'est une application de cours de base. A mon avis tous les zéros arriver à ce stade save faire ce petit programme.
  • Partager sur Facebook
  • Partager sur Twitter
15 octobre 2008 à 20:37:23

Oui, normalement devrais pas y avoir de problème. Sauf pour ceux qui débutent vraiment !
  • Partager sur Facebook
  • Partager sur Twitter
15 octobre 2008 à 20:41:19

Catsoulet : J'espère bien. :)
-Triskel- : Ces exercices sont pour eux.
  • Partager sur Facebook
  • Partager sur Twitter
15 octobre 2008 à 21:24:48

Je sais, je sais ! Et je leur dit bonne chance !
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
15 octobre 2008 à 21:56:15

Merde ! J'arrive pas à ce que l'utilisateur choisisse le nom du fichier car je peux pas faire %s à l'intérieur de fopen sinon il me dit trop d'arguments (ce que je comprends) ! Merde encore !
  • Partager sur Facebook
  • Partager sur Twitter
15 octobre 2008 à 21:58:04

Citation : ttthebest

Merde ! J'arrive pas à ce que l'utilisateur choisisse le nom du fichier car je peux pas faire %s à l'intérieur de fopen sinon il me dit trop d'arguments (ce que je comprends) ! Merde encore !


Stock le nom du fichier dans une variable et tu envois cette dernière à fopen.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
15 octobre 2008 à 22:16:13

Ok merci ! :) Il faut donc concaténer le chemin avec le nom du fichier, en fait !

EDIT : je fais genre
fichier = fopen ("leNomDuFichier", "r");


EDIT2 : non je me suis gouré c'est en fait ça qu'il faut faire
fichier = fopen (("%s", nomDuFichier), "r");
  • Partager sur Facebook
  • Partager sur Twitter
15 octobre 2008 à 23:56:09

Citation : ttthebest


EDIT2 : non je me suis gouré c'est en fait ça qu'il faut faire

fichier = fopen (("%s", nomDuFichier), "r");

Ton compilateur laisse passer ça sans un warning ? Change de compilateur...

Ça marche, mais pas du tout pour la raison que tu crois : l’expression ("%s", nomDuFichier) renvoie uniquement nomDuFichier (le "%s" passe purement et simplement « à la trappe »), et ton appel est donc équivalent à : fopen(nomDuFichier, "r") .

Un compilateur digne de ce nom devrait émettre un warning sur une telle expression (GCC 4.2.3 dit « warning: left-hand operand of comma expression has no effect »).
  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2008 à 10:30:12

Bonjour,

Je vais aussi participer, pour faire passer le temps quand je m'ennuis ^^ .
D'ailleur je viens d'envoyer ma solution à "la réponse".

Bon courage aux autre participants !
  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2008 à 10:55:40

hello à tous!
Voila je commence l'exo la :) et bon j'ai une petite couille dans la soupe ^^

Je voudrais en fait que l'utilisateur rentre une chaine de caractère, récupérée par un scanf.
Donc j'ai déclaré chaine_fichier[200];
et je voudrais avec fputs recupérer cette chaine et l'inscrire dans le fichier:
Sauf que!
Il inscrit seulement le premier mot de la chaine

ex:

Salut à tous!
Bah dans mon fichier il affichera Salut

Voila la portion du code en question:

fichier = fopen("test.txt", "w");
            printf("Entrez la chaine de caractere que vous voulez inscrire dans le fichier:\n");
            scanf("%s",&chaine_fichier);
            fputs(chaine_fichier , fichier);
            fclose(fichier);
            getchar();


ps: la variable chaine_fichier est déclaré comme suit:

char chaine_fichier[200];


Merci de votre aide :p
  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2008 à 11:34:55

salut Fion,

J'ai le meme probleme que toi, mais je pense que sa vient de la fonction scanf qui merdouille, car en essayant ce simple code, le probleme persiste :

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

int main()
{

char txt[200] = "";

printf("Rentre un texte :");
scanf("%s", txt);
printf("%s\n", txt);
}
  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2008 à 11:49:43

Utilisée comme ça, la fonction scanf s'arrête au premier espace qu'elle rencontre. De plus, il n'y a pas de limite de saisis et donc on peut rentrer autant de caractères que l'on veut et de ce fait dépasser des limites du tableau.

Pour le résoudre le problème, il faut utiliser la fonction fgets (présentée dans le tutoriel annexe de M@teo).
  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2008 à 12:24:12

ok merci du tuyau octal ;)

EDIT: alors je sais pas trop mais j'ai fait ca :

printf("Entrez la chaine de caractere que vous voulez inscrire dans le fichier:\n");

            fgets(chaine_fichier, 200, stdin);
            fputs(chaine_fichier, fichier);


donc ca ne foire pas, sauf que ca ne m'écrit rien dans mon fichier ca reste blanc.
j'ai fait une connerie? :D

Le pire c'est que la taille du fichier change, quand j'execute mon programme et que je rentre la chaine de caractere, le fichier passe à une taille de 0 ko à 1 ko mais n'affiche rien à l'interieur!
Quelqu'un a-il une idée?

merci :)
  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2008 à 18:02:07

Bonne initiative ce topic. J'm'y mettrai quand j'aurai revu les fichiers, étant donné que j'ai arrêté la programmation durant plusieurs semaines :<
  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2008 à 18:20:17

@Fion

Si tu as fait des appels à fgets() avant celui là et que tu n'as pas vidé le buffer, l'appel est ignoré.
void purger(void)
{
    int c = 0;

    while ((c = getchar()) != '\n' && c != EOF)
        ;
}

void clean(const char* s)
{
    char* p = strchr(s, '\n');

    if (p)
    {
        *p = '\0';
    }

    else
    {
        purger();
    }
}



  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2008 à 18:41:36

Salut à tous, voila , j'ai quelques petites questions :

• Tout d'abord, lorsque j'écris dans un fichier par mon programme, si j'essaie de lire ce fichier dans la même session de ce programme, il n'est pas actualisé et est vide alors que si je ferme et relance le programme, je peut lire le bon contenu, ajouté au juste avant. Comment ça se fait et est-il possible d'y remédier ?

• Mon second problème est que ça ne me plait pas de limiter la taille de l'adresse donnée et la taille du texte que l'on veut écrire dans le fichier choisit, y a-il un moyen pour éviter ça ? (j'ai penser a l'allocation dynamique mais je ne veut pas non plus demander a l'utilisateur de prévoir le nombre de caractères qu'il compte taper :euh: )

Voila les petits problèmes auxquels je suis confronté ^^

Merci d'avance pour vos réponses :p
  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2008 à 19:12:45

Citation : DzEt4

• Tout d'abord, lorsque j'écris dans un fichier par mon programme, si j'essaie de lire ce fichier dans la même session de ce programme, il n'est pas actualisé et est vide alors que si je ferme et relance le programme, je peut lire le bon contenu, ajouté au juste avant. Comment ça se fait et est-il possible d'y remédier ?


Mmhh, il faudrait voir le code source du programme. Le problème pourrait venir du fait que tu essayes de lire ton fichier après avoir écrit dedans sans t'être repositionné au début.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
16 octobre 2008 à 19:24:01

Merci noob4ever justement je me demandais pourquoi il voulait pas de mon 2e fgets :)

EDIT : même avec ta fonction "clean" faite juste avant le 2e fgets ça ne marche pas !
  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2008 à 22:10:27

Comprenez-vous au moins comment fonctionne les fonctions de noob4ever ? :) C'est le minimum pour bien pouvoir les utiliser. D'ailleurs, elles sont bien pratiques et leur fonctionnement n'est pas complexe.
  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2008 à 22:39:47

Citation : ttthebest

Merci noob4ever justement je me demandais pourquoi il voulait pas de mon 2e fgets :)

EDIT : même avec ta fonction "clean" faite juste avant le 2e fgets ça ne marche pas !


Fait voir ton code.

Citation : Pas de titre

Mon second problème est que ça ne me plait pas de limiter la taille de l'adresse donnée et la taille du texte que l'on veut écrire dans le fichier choisit, y a-il un moyen pour éviter ça ? (j'ai penser a l'allocation dynamique mais je ne veut pas non plus demander a l'utilisateur de prévoir le nombre de caractères qu'il compte taper :euh: )


C'est les limites de la console, la solution est de passé en IHM avec une RichTextBox.
  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2008 à 22:42:08

Donner ma fonction ici n'est pas forcement une bonne idée :p

Sinon, même avec un rewind(fichier) avant l'utilisation ça ne change rien, je suis aller voir, pendant le programme, le fichier créé et toujours vide, il ne se remplit que quand je quitte le programme o_O
  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2008 à 23:55:35

Postes ton code, il n'y a pas de problème. :) Ce n'est que ainsi que l'on pourra te répondre.
  • Partager sur Facebook
  • Partager sur Twitter