Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exercices pour débutants en C

Au menu : zSommeChiffres (nombres, algo)

28 novembre 2009 à 23:22:42

Citation : HighTam

Je trouve que l'exercice Cosway proposé par Nonoc est vraiment intéressant.



D'abord, c'est Nanoc le nom exact.


Ensuite, c'est en effet un exercice assez intéressant. Pour info, je précise que ce programme, qui est initialement un programme Unix, a été codé par son inventeur en Perl et pas en C. Bien sûr, ce programme peut tout aussi bien être développé sous Windows et exécuté dans la "fenêtre DOS". Sous Unix, il y a une variante cowthink :


$ cowthink "Mon dieu ! mais quel beau taureau Trop craquant Je sens que mon lait va tourner"
 ________________________________________
( Mon dieu ! mais quel beau taureau Trop )
( craquant Je sens que mon lait va       )
( tourner                                )
 ----------------------------------------
        o   ^__^
         o  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||



Les spécifications des coupures de ligne et du placement de la vache sont pas très claires.
  • Partager sur Facebook
  • Partager sur Twitter
4 décembre 2009 à 18:19:54

Zreader : ma solution

J'ai codé l'ensemble du Zreader en un seul gros fichier main.c (oui je sais pas bien :euh: ).
Enfin mis a par cela j'attend de votre part moult suggestion et idées d'améliorations.
Le code est entièrement de mon crus donc peut être un peu simpliste mais bon il est en tout cas fonctionnel.

Enfin assez palabrer voici le code :

/*

Zreader

main.c
------

Par Phanty_

*/

#include <stdio.h>
#include <stdlib.h>
#define MAX 1000

int main()
{

    int choix = 0, boucle = 0;
    FILE* fichier = NULL;
    char fichierChoisi[MAX] = "", chaine[MAX] = "";

    do
    {
        printf(" 1. Lire un fichier\n");
        printf(" 2. Creer un fichier\n");
        printf(" 3. Ecrire dans un fichier\n");
        printf(" 4. Sortir\n");
        printf("Votre choix :  ");
        scanf("%d",&choix);

        if( choix == 1) // lecture
        {
            printf("\nQuelle fichier voulez vous ouvrir?\n");
            scanf("%s",fichierChoisi);
            fichier = fopen(fichierChoisi,"r");
            if (fichier != NULL)
                {
                    while (fgets(chaine, MAX, fichier) != NULL)
                    {
                        printf("%s\n",chaine);
                    }
                    fclose(fichier);
                }
            else
                {
                    printf("Impossible d'ouvrir le fichier test.txt");
                }
                boucle = 1;
        }
        else if ( choix == 2) // Création
        {
            printf("\nDonner un nom et une extension a votre fichier\n");
            scanf("%s",fichierChoisi);
            fichier = fopen(fichierChoisi,"w");
            if (fichier != NULL)
                {
                    printf("Votre fichier a bien etait creer\n");
                    fclose(fichier);
                }
            else
                {
                    printf("Impossible de creer le fichier\n");
                }
                boucle = 1;

        }
        else if ( choix == 3) // Ecriture
        {
            printf("Dans quelle fichier voulez vous ecrire\n");
            scanf("%s",fichierChoisi);
            fichier = fopen(fichierChoisi,"a");
            if (fichier != NULL)
            {
                printf("Vous pouvez a present ecrire dans le fichier : %s\n",fichierChoisi);
                scanf("%s",chaine);
                fputs(chaine,fichier);
                fclose(fichier);
            }
            else
            {
                printf("Le programme a rencontrer un programme et n'a pas put ouvrir le fichier %s\n",fichierChoisi);
            }
            boucle = 1;

        }
        else if ( choix == 4) // Quitter
        {
            printf("\n\nMerci d'avoir utilise Zreader!\n");
            boucle =0;
        }
        else // Erreur
        {
            printf("\n\nSe choix n'est pas disponible\n\n\n");
            boucle = 1;
        }
    } while ( boucle == 1);

    return 0;
}


J'attend vos commentaires avec impatience.
  • Partager sur Facebook
  • Partager sur Twitter
6 décembre 2009 à 0:22:02

Bon, ben je me lance pour zGrep, c'est mon premier exo, :euh:
/*   zGrep par artificier59
 *
 */

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


void insertToRight (char *chaine, const char charToInsert,
		     const int sizeOfString);

int
main (int argc, char **argv)
{
  FILE *file = NULL;
  char *buffer = NULL;
  int sizeOfBuffer = 0;
  int nbPatern = 0;
  int line = 1, columns = 1;
  int readChar = 0;

  /* Verification de la requête */
  if (argc != 3)
    {
      fprintf (stderr, "Usage: grep PATRON [FICHIER]...\n");
      exit (0);
    }

  /* Ouverture du fichier */
  if ( !(file = fopen (argv[2], "r")) )
    {
      fprintf (stderr,
	       "zGrep: %s: Aucun fichier ou répertoire de ce type\n",
	       argv[2]);
      exit (1);
    }
  /* Calcul de la taille pour le buffer */
  sizeOfBuffer = strlen (argv[1]);

  /* Allocation de la memoire pour le buffer */
  buffer = calloc (sizeOfBuffer + 1, sizeof (char));

  /* Tant qu'on est pas à la fin du fichier */
  while (readChar!= EOF)
    {
      /* Lecture des caracteres un par un */
      readChar = fgetc (file);

      /* Incrementation du nombre de colonnes */
      columns++;

      /* Cas d'une nouvelle ligne */
      if (readChar == '\n')
	{
	  line++;
	  /* Remise a zero du nombre de cilonnes */
	  columns = 1;
	}

      /* Insertion par la droite des caracteres dans le buffer */
      insertToRight (buffer, readChar, sizeOfBuffer);
      if (!strcmp (buffer, argv[1]))
	{
	  /* Incrementation du nombre d'occurences */
	  nbPatern++;

	  /* Affichage du resultat de la recherche */
	  fprintf (stdout, "Occurrence %d -> ligne %d, colonne %d\n",
		   nbPatern, line, columns - sizeOfBuffer);
	}
    }

  printf ("Nombre d'occurrences.. %d\n", nbPatern);

  /* Fermeture du fichier */
  if (fclose (file))
    {
      fprintf (stderr, "Error %d\n", errno);
      exit (0);
    }

  /* Liberation du buffer */
  free (buffer);
  return 0;
}

void
insertToRight (char *chaine, const char charToInsert, const int sizeOfString)
{
  int i;

  /* Decallage de chaque caractere d'un cran vers la gauche */
  for (i = 0; i < sizeOfString; i++)
	chaine[i] = chaine[i + 1];

  /* Insertion du caractère à droite */
  chaine[sizeOfString - 1] = charToInsert;
}



Bon, le petit problème, c'est que j'affiche le nombre d'occurrences qu'à la fin. :euh:
Sinon, ça entrainait trop de complications :-°


Bon, allez y mollo, je débute ^^
  • Partager sur Facebook
  • Partager sur Twitter
- Il y a un chemin vers chaque sommet, même le plus haut -
11 décembre 2009 à 22:00:19

@ Phanty_ : C'est pas trop mal pour un début =)
Maintenant il te reste à découper ton code en fonctions et à enlever les choses superflues ;)
Et corriger les fautes de français :-°

@ artificier59 : Ya la difficulté que tu n'as pas prise en compte :p
Si j'entre "pouetlesforever" dans ton fichier il me dira que "les" est présent alors qu'il ne devrais pas :lol:
Je te laisse remédier à ça !
J'ai pas bien compris l'utilité de ta fonction :euh:
Tu te compliques la tête pour rien je pense ;)
Et même remarque que pour Phanty_, fais des fonctions ;)

Bon courage !
  • Partager sur Facebook
  • Partager sur Twitter
12 décembre 2009 à 12:20:56

Citation : Pouet_forever

@ artificier59 : Ya la difficulté que tu n'as pas prise en compte :p
Si j'entre "pouetlesforever" dans ton fichier il me dira que "les" est présent alors qu'il ne devrais pas :lol:
Je te laisse remédier à ça !


Ah, oui, merci, j'avais pas lu les règles en entier ^^

Je viens de corriger, j'ai effectué deux changements ligne 48 et 75:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <ctype.h>

void insertToRight (char *chaine, const char charToInsert,
		    const int sizeOfString);

int
main (int argc, char **argv)
{
  FILE *file = NULL;
  char *buffer = NULL;
  int sizeOfBuffer = 0;
  int nbPatern = 0;
  int line = 1, columns = 1;
  int readChar = 0;

  /* Verification de la requête */
  if (argc != 3)
    {
      fprintf (stderr, "Usage: grep PATRON [FICHIER]...\n");
      exit (0);
    }

  /* Ouverture du fichier */
  if (!(file = fopen (argv[2], "r")))
    {
      fprintf (stderr,
	       "zGrep: %s: Aucun fichier ou répertoire de ce type\n",
	       argv[2]);
      exit (1);
    }
  /* Calcul de la taille pour le buffer */
  sizeOfBuffer = strlen (argv[1]);

  /* Allocation de la memoire pour le buffer
   *
   * [CORRECTION]
   * J'ai ajouté 2 au nombre de cases à allouer pour
   * buffer, pour qu'il conntienne un caractere avant
   * argv[1], et un apres.
   * Ces deux caracteres permetront de savoir si buffer
   * contient une sous chaine d'un mot, ou s'il contient
   * un mot entier.
   */
  buffer = calloc (sizeOfBuffer + 3, sizeof (char));

  while (readChar != EOF)
    {
	  /* Lecture des caracteres un par un */
      readChar = fgetc (file);

      /* Incrementation du nombre de colonnes */
      columns++;

      /* Cas d'une nouvelle ligne */
      if (readChar == '\n')
	{
	  line++;
	  /* Remise a zero du nombre de cilonnes */
	  columns = 1;
	}

      /* Insertion par la droite des caracteres dans le buffer */
      insertToRight (buffer, readChar, sizeOfBuffer + 2);
    
	/* [CORRECTION]
	 * Si le caractere de début et de fin de buffer 
	 * sont autres que des caracteres alpahnumériques,
	 * alors buffer contient un mot.
	 * Avec "strstr()" je verifie si ce mot est argv[1].
	 */
	  if (strstr (buffer, argv[1]) != NULL && 
		 !isalnum (buffer[0]) && !isalnum(buffer[sizeOfBuffer + 1]))
	{
	  /* Incrementation du nombre d'occurences */
	  nbPatern++;

	  /* Affichage du resultat de la recherche */
	  fprintf (stdout, "Occurrence %d -> ligne %d, colonne %d\n",
		   nbPatern, line, columns - sizeOfBuffer - 1);
	}
    }

  fprintf (stdout, "Nombre d'occurrences.. %d\n", nbPatern);

  /* Fermeture du fichier */
  if (fclose (file))
    {
      fprintf (stderr, "Error %d\n", errno);
      exit (0);
    }

  /* Liberation du buffer */
  free (buffer);
  return 0;
}

void
insertToRight (char *chaine, const char charToInsert, const int sizeOfString)
{
  int i;

  /* Decallage de chaque caractere d'un cran vers la gauche */
  for (i = 0; i < sizeOfString; i++)
    chaine[i] = chaine[i + 1];

  /* Insertion du caractère à droite */
  chaine[sizeOfString - 1] = charToInsert;
}



Sinon, pour ce qui est de ma fonction, elle me permet en fin de chaine d'insérer un caractère.
Voici le problème si j'utilise "fgets()":

Citation : fichier.txt


blabla zut les toto k, blablabla,
machin bidule, etc...


la chaine lue par fgets sera " blab" puis "la zu" puis "ut le" puis "s tot", etc... :(
Alors que pourtant, mon fichier contient bien "les" :o
Donc, je suis obligé (enfin, j'ai pas trouvé mieux), de lire le fichier caractere par caractere, puis de les inserer en fin de chaine :-°

Je me suis certainement, compliqué pour rien, mais je n'ai pas trouvé d'autres idées là-dessus. :euh:
  • Partager sur Facebook
  • Partager sur Twitter
- Il y a un chemin vers chaque sommet, même le plus haut -
12 décembre 2009 à 12:59:08

Tu peux lire entièrement ta ligne et faire ce que tu as à faire :)
Sinon si je mets "les" en premier mot ça ne fonctionne pas :p

les petits poids sont dans l'eau
  • Partager sur Facebook
  • Partager sur Twitter
12 décembre 2009 à 19:30:17

Bon, le problème, c'est que au départ, "buffer" est vide, c'est à dire qu'il contient "|\O|\0|\0|\0|\0|"
Si j'insere un caractere 'c' à la fin, j'aurais donc "|\0|\0|\0|\0|c|". :(
Je te laisse imaginer la suite ^^

Bon, c'est un peu du "bidouillage", j'en conviens, mais la seule solution que j'ai trouvé, est de remplir la chaine de caractere ' ' juste après son allocation :euh:
een rajoutant ces lignes:
for (i = 0; i <= (sizeOfBuffer + 2); i++)
    buffer[i] = ' ';


Voici le code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <ctype.h>

void insertToRight (char *chaine, const char charToInsert,
		    const int sizeOfString);

int
main (int argc, char **argv)
{
  FILE *file = NULL;
  char *buffer = NULL;
  int sizeOfBuffer = 0;
  int nbPatern = 0;
  int line = 1, columns = 1;
  int readChar = 0;
  int i = 0;

  /* Verification de la requête */
  if (argc != 3)
    {
      fprintf (stderr, "Usage: grep PATRON [FICHIER]...\n");
      exit (0);
    }

  /* Ouverture du fichier */
  if (!(file = fopen (argv[2], "r")))
    {
      fprintf (stderr,
	       "zGrep: %s: Aucun fichier ou répertoire de ce type\n",
	       argv[2]);
      exit (1);
    }
  /* Calcul de la taille pour le buffer */
  sizeOfBuffer = strlen (argv[1]);

  /* Allocation de la memoire pour le buffer
   *
   * [CORRECTION]
   * J'ai ajouté 2 au nombre de cases à allouer pour
   * buffer, pour qu'il conntienne un caractere avant
   * argv[1], et un apres.
   * Ces deux caracteres permetront de savoir si buffer
   * contient une sous chaine d'un mot, ou s'il contient
   * un mot entier.
   */
  buffer = calloc (sizeOfBuffer + 3, sizeof (char));
  
  /* Je remplie la chaine de '_' pour ne pas avoir de problèmes
   * par la suite
   */
  for (i = 0; i <= (sizeOfBuffer + 2); i++)
    buffer[i] = ' ';

  while (readChar != EOF)
    {
      /* Lecture des caracteres un par un */
      readChar = fgetc (file);

      /* Incrementation du nombre de colonnes */
      columns++;

      /* Cas d'une nouvelle ligne */
      if (readChar == '\n')
	{
	  line++;
	  /* Remise a zero du nombre de cilonnes */
	  columns = 1;
	}

      /* Insertion par la droite des caracteres dans le buffer */
      insertToRight (buffer, readChar, sizeOfBuffer + 2);

      /* [CORRECTION]
       * Si le caractere de début et de fin de buffer 
       * sont autres que des caracteres alpahnumériques,
       * alors buffer contient un mot.
       * Avec "strstr()" je verifie si ce mot est argv[1].
       */
      if (strstr (buffer, argv[1]) != NULL &&
	  ((!isalnum (buffer[0]) && !isalnum (buffer[sizeOfBuffer + 1]))
	   || columns == 0))
	{
	  /* Incrementation du nombre d'occurences */
	  nbPatern++;

	  /* Affichage du resultat de la recherche */
	  fprintf (stdout, "Occurrence %d -> ligne %d, colonne %d\n",
		   nbPatern, line, columns - sizeOfBuffer - 1);
	}
    }

  fprintf (stdout, "Nombre d'occurrences.. %d\n", nbPatern);

  /* Fermeture du fichier */
  if (fclose (file))
    {
      fprintf (stderr, "Error %d\n", errno);
      exit (0);
    }

  /* Liberation du buffer */
  free (buffer);
  return 0;
}

void
insertToRight (char *chaine, const char charToInsert, const int sizeOfString)
{
  int i;

  /* Decallage de chaque caractere d'un cran vers la gauche */
  for (i = 0; i < sizeOfString; i++)
    chaine[i] = chaine[i + 1];

  /* Insertion du caractère à droite */
  chaine[sizeOfString - 1] = charToInsert;
}

  • Partager sur Facebook
  • Partager sur Twitter
- Il y a un chemin vers chaque sommet, même le plus haut -
15 décembre 2009 à 12:55:18

Je sais plus où j'ai vu ça, mais dans tes prototypes, tu n'es pas obligé de laisser les noms des variables, par exemple :
int *truc(int**);

int main(void)
{
    return 0
}

int *truc(int** pointeur_de_pointeur)
{
   //...
}

Biensûr, si c'est pour te repérer que tu fais ça, alors je n'ai plus rien à dire ^^ .

Simple question, chez vous aussi il n'y a plus de post-it sur le forum C ?
  • Partager sur Facebook
  • Partager sur Twitter
15 décembre 2009 à 13:05:36

Non il n'y a plus de post-its ...

Sinon oui dans les prototypes tu peux ne mettre que le type de variable, et pour les tableaux tu peux faire mieux aussi :

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

void f(int tab[*][*]);

int main(void) {
	int tab[2][4] = { 1, 2, 3, 4, 5, 6, 7, 8 };
	f(tab);
	return EXIT_SUCCESS;
}

void f(int tab[][4]) {
	int i;
	for (i = 0; i < 8; i++) {
		printf("%d ", *(*tab+i));
	}
}

  • Partager sur Facebook
  • Partager sur Twitter
16 décembre 2009 à 13:40:50

Salut
Voici ma solution pour le zReader, je vous presente mon code source avec un peu de commentaires :) .Et surtout j'aurai besoin de vos critiques et avec plaisir vos idées d'améliorations :p
/* Creation du zReader par Pierreroi
   Exercice propose par le site du zero
   */


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

#define TAILLE_MAX 1000 // Tableau de taille 1000

void viderBuffer();

int main()
{
    int choix = 0, age = 0;
    char chaine[TAILLE_MAX] = "", prenom[20];
    FILE *fichier = NULL, *fichier1 = NULL, *fichier2 = NULL; // Déclaration et initialisations des fichiers

    printf("\n==== Ceci est un programme ecrit par Pierreroi ====\n\n");
    printf("Programme de lecture et d'ecriture d'un fichier en langage C\n\n");
    printf("1. Lire un fichier\n");
    printf("2. Creer un fichier\n");
    printf("3. Ecrire dans un fichier\n");

    printf("\nVotre choix");
    scanf("%d",&choix);

    switch(choix) // Test les choix
    {
        // Mode lecture
        case 1:
        {
            /* J'ouvre le fichier "test.txt" en mode ecriture pour avoir le fichier créé
               avant qu'il ne soit lu en mode lecture
               */
            fichier = fopen("test.txt", "w"); // Ouverture du fichier en mode ecriture, le fichier sera crée

            if (fichier != NULL)
            {
                printf("Quel age avez-vous ? ");
                scanf("%d",&age);
                fprintf(fichier, "Ce programmeur a %d ans", age); // On écrit l'âge dans le fichier
                fclose(fichier); // Fermeture du fichier en mode ecriture
            }

           fichier = fopen("test.txt", "r"); // Ouverture du fichier en mode lecture
           if (fichier != NULL)
           {
               fgets(chaine, TAILLE_MAX, fichier); // On lit TAILLE_MAX caractère, et on stocke dans "chaine"
               printf("%s", chaine); // On affiche la chaine
               fclose(fichier); // Fermeture du même fichier en mode lecture
           }
        }
        break;

    // Mode creation
        case 2:
        {
            fichier1 = fopen("cible.txt", "w"); // Ouverture du fichier 1

            if (fichier1 != NULL);

            fclose(fichier1);
        }
        break;

    // Mode écriture
        case 3:
        {
           fichier2 = fopen("but.txt", "w");
           if (fichier2 != NULL)
           {
               printf("Quel est votre prenom ? ");
               viderBuffer();
               fgets(prenom, 20, stdin);
               fprintf(fichier2, "Ce programmeur s'appelle %s", prenom);
               fclose(fichier2);
           }
        }
        break;

        default:
           printf("Erreur !! Rentre un nombre compris entre 1 et 3");
    }


    return 0;
}

void viderBuffer()
{
    int c = 0;
    while (c != '\n' && c != EOF)
    {
        c = getchar();
    }
}
  • Partager sur Facebook
  • Partager sur Twitter
16 décembre 2009 à 13:56:06

Les sujets en Post_it ont disparu et les interventions sur ces sujets n'apparaissent plus dans le forum C...Problème résolu.


if (fichier1 != NULL);

Le ; est en trop... ;)
Dans les case
Les accolades sont en trop également.

Ce code compile chez toi ?
  • Partager sur Facebook
  • Partager sur Twitter
Zeste de Savoir, le site qui en a dans le citron !
17 décembre 2009 à 9:51:13

(le code compile chez moi sans problème :lol: )

Sinon je pense qu'au niveau des consignes tu ne les as pas respectées :)
Quand on dit "lire un fichier" on ne te demande pas d'écrire dedans ni de le créer mais tout simplement de lire ce qu'il y a dans le fichier, et si le fichier n'est pas présent dire qu'il n'existe pas :)
Pour le mode création même remarque que GurneyH, il y a un ; en trop :)
Pour t'entrainer un peu tu pourrais découper ton code en fonctions aussi :)

Une fonction "menu", une "creation", "lecture", "ecriture" par exemple :)
  • Partager sur Facebook
  • Partager sur Twitter
19 décembre 2009 à 18:53:29

Salut à tous. Je vous propose mon code pour zReader, j'aimerai avoir votre avis et vos critique, le code est fonctionnel, mais tout est loin d'être optimisé, donc des critiques sont bienvenues.

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

char menu(void);
void read_file(void);
void create_file(void);
void write_file(void);
FILE *get_file(char mode[2]);
void empty_buffer(void);

int main(void)
{
    char select;

    while (1)
    {
        select = menu();

        switch (select)
        {
            case '1':
                read_file();
                break;
            case '2':
                create_file();
                break;
            case '3':
                write_file();
                break;
            case '4':
                return EXIT_SUCCESS;
                break;
            default:
                printf("Unexpected Error");
                empty_buffer();
                return EXIT_FAILURE;
        }
    }
}

char menu(void)
{
    char select = 0;

    system("Cls");
    printf(" zReader v1.0\n\n"
           " 1. Lire un fichier\n"
           " 2. Creer un fichier\n"
           " 3. Ecrire dans un fichier\n"
           " 4. Quitter\n"
           "\nVotre select : ");

    while (select == 0)
    {
        select = getchar();

        if (select != '1' && select != '2' && select != '3' && select != '4')
        {
            select = 0;
        }
    }

    empty_buffer();

    return select;
}

void read_file(void)
{
    FILE *file = NULL;
    char c = 0;

    file = get_file("r");

    if (file == NULL)
    {
        printf("Error : Le fichier n'existe pas.");
        exit(EXIT_FAILURE);
    }

    system("Cls");

    while (c != EOF)
    {
        c = fgetc(file);
        printf("%c", c);
    }

    fclose(file);

    empty_buffer();

    return;
}

void create_file(void)
{
    FILE *file = NULL;

    file = get_file("w");

    if (file == NULL)
    {
        printf("Error : Le chemin spécifié n'existe pas.");
        exit(EXIT_FAILURE);
    }

    fclose(file);

    return;
}

void write_file(void)
{
    FILE *file = NULL;
    int i = 0;
    char c = 0;

    file = get_file("a");

    system("Cls");
    printf("Entrez le texte \205 ajouter.\n"
           "Appuyez sur Entr\202e pour terminer la saisie.\n");

    c = getchar();

    while (c != '\n')
    {
        fputc((int)c, file);
        c = getchar();
    }

    fclose(file);

    return;
}

FILE *get_file(char mode[2])
{
    FILE *file = NULL;

    char path[255];
    int i = 0;

    system("Cls");
    printf("Indiquez le chemin du fichier.\n");

    while (i != -1)
    {
        path[i] = getchar();
        if (path[i] == '\n')
        {
            path[i] = '\0';
            i = -1;
        }
        else
        {
            i++;
        }
    }

    file = fopen(path, mode);

    return file;
}

void empty_buffer(void)
{
    char c = 0;

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

    return;
}


Merci à vous.
  • Partager sur Facebook
  • Partager sur Twitter
20 décembre 2009 à 12:48:03

J'aurais aimé une réponse un peu plus critique :lol:
  • Partager sur Facebook
  • Partager sur Twitter
20 décembre 2009 à 12:52:41

Ok je relis ton code tout à l'heure et je critique :p
Mais ne m'en veux pas après hein :p

Déjà première critique : N'abuse pas des system("cls"); c'est pas portable du tout ...
  • Partager sur Facebook
  • Partager sur Twitter
20 décembre 2009 à 13:08:00

Ouais mais je peux utiliser quoi de portable pour vider l'écran ?
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
20 décembre 2009 à 13:19:35

Un fonction ne retourne pas un char mais un char*
  • Partager sur Facebook
  • Partager sur Twitter
20 décembre 2009 à 13:30:17

Citation : LeChienKiTu

Un fonction ne retourne pas un char mais un char*


Encore une fois tu aurais mieux fait de ne rien dire >_<

Citation : Nazgul Aars

Ouais mais je peux utiliser quoi de portable pour vider l'écran ?


Il n'y à rien de portable mais tu peux faire ça pour que ce soit un minimum portable :

#ifdef WIN32
#	define clear() system("cls")
#else
#	define clear() system("clear")
#endif
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
20 décembre 2009 à 13:34:49

Ah oui, mince, me suis tromper. J'ai confondu, hum. Désolé.
  • Partager sur Facebook
  • Partager sur Twitter
20 décembre 2009 à 13:38:30

Citation : LeChienKiTu

Un fonction ne retourne pas un char mais un char*


J'ai pas compris, une fonction renvoie ce que tu lui dis de renvoyer :lol:

Citation : Pouet_forever

Il n'y à rien de portable mais tu peux faire ça pour que ce soit un minimum portable :

#ifdef WIN32
#	define clear() system("cls")
#else
#	define clear() system("clear")
#endif



En effet, merci si y'a d'autres critique, je suis ouvert, je vais pas vous en vouloir, c'est comme ça qu'on progresse :D
  • Partager sur Facebook
  • Partager sur Twitter
20 décembre 2009 à 15:24:54

getchar renvoie un int donc tu devrais le récupérer en tant que int.

Je pense que cette ligne là tu peux l'améliorer :

if (select != '1' && select != '2' && select != '3' && select != '4')
/* en */
if (select < '1' || select > '4')

Tu fais une fonction menu mais tu traites ton menu dans le main. Pourquoi ne pas tout faire dans ta fonction menu ?
Pourquoi dans ton main faire une boucle infinie ? Tu peux très bien faire une boucle "normale" :)

Pourquoi tu ne gères pas tes erreurs de fichiers dans ta fonction get_file ?

Dans ton prototype : FILE *get_file(char mode[2]) le [2] ne sert à rien ^^ tu peux même mettre *mode ou mode[] ;)

Dans ta fonction read_file lire caractère par caractère est assez lourd, tu pourrais par exemple faire des fgets de grande taille (1024 ?).

Dans toutes tes fonctions ne renvoyant rien il est inutile de mettre le "return;"

Ca te va ? :)
Tu en veux encore ? :D
  • Partager sur Facebook
  • Partager sur Twitter
20 décembre 2009 à 15:51:49

J'te remercie pour tout ça, c'est pas évident d'apprendre en autodidacte, j'ai hâte de commencé mes études et d'avoir des profs :-°

J'vais corriger toutes ces erreurs et puis oui j'en veux bien encore si tu le demande :lol:

Edit : Pour les erreurs, j'avais préféré les traiter en dehors, parce qu'elles ne sont pas les mêmes selon le mode d'ouverture.
  • Partager sur Facebook
  • Partager sur Twitter
21 décembre 2009 à 4:27:57

VOILA MON PETIT SOUCI ET JE C JE NE SUI QUAU DEBU ME DEJA UN SOUCI ALOR VOILA LEREUR SAFICHE AU NIVEAU DE IF G TT ESAILLER MEME DE METRE UNE DECLARATION DE MA VARIABLE JUSTE AVAN ME IL ME DI QUE C UNE EREUR ALOR LA SUI BLOQUER ET JAI FRENCHEMEN PA ENVI DE SAUTER SE COUR CAR JAI PEUR DE MI PERDRE APRE UN GRAN MERCI A CELUI QUI DEGNERAI BIEN ME FILER UN PTI COUP DE POUCE MERCI ;)




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

int main()

if ( age >= 18)//si lage et superieur ou egale a 18
{
printf ("vou ete majeur");
}
else//sinon
{
printf("ah c bete sa hein");
]}
return 0;

  • Partager sur Facebook
  • Partager sur Twitter
21 décembre 2009 à 12:48:16

Citation : DIDOU LEAMER

VOILA MON PETIT SOUCI ET JE C JE NE SUI QUAU DEBU ME DEJA UN SOUCI ALOR VOILA LEREUR SAFICHE AU NIVEAU DE IF G TT ESAILLER MEME DE METRE UNE DECLARATION DE MA VARIABLE JUSTE AVAN ME IL ME DI QUE C UNE EREUR ALOR LA SUI BLOQUER ET JAI FRENCHEMEN PA ENVI DE SAUTER SE COUR CAR JAI PEUR DE MI PERDRE APRE UN GRAN MERCI A CELUI QUI DEGNERAI BIEN ME FILER UN PTI COUP DE POUCE MERCI ;)



Oula, les majuscule c'est pas top, j'ai même pas envie de lire ton texte. :colere2:

Dans ton code tu as omis les accolades du main.

Et c'est quoi ce crochet fermant avant l'accolade de fin du else ? :-°
  • Partager sur Facebook
  • Partager sur Twitter
21 décembre 2009 à 12:57:28

De toute façon ce n'est pas le bon endroit pour poster ;)
  • Partager sur Facebook
  • Partager sur Twitter
24 décembre 2009 à 19:36:23

s'il vous plais, je suis coinsé avec un exercice:
ecrire un pgm c qui recherche le point de selle d'une matrice m[50][100]
un point de selle d'une matrice est le minimum de la ligne et la maximum de la colonne.
<attention>si le pt de selle existe alors il est unique.
merci de vouloir me repondre
  • Partager sur Facebook
  • Partager sur Twitter
24 décembre 2009 à 22:43:59

Pas le bon endroit pour poster u_u
  • Partager sur Facebook
  • Partager sur Twitter
29 décembre 2009 à 14:18:51

Salut à tous, c'est la première fois que je m'exprime ici, et je peux constater que le combat "autodidactes-traditionnels" n'est pas près d'être résolu.Je suis sur ce site pour apprendre à me débrouiller en "prog",j'ai bien compris qu'il fallait déposer ses "projets" pour avoir des réponses, mais à part quelques "zeros" dans mon cas qui ont essayé d'avoir des réponses, ce qui apparait surtout, c'est une joute ostentatoire entre "hauts diplômés" qui oublient que beaucoup de "zéros" (ou futurs?) n'ont pas dépassé la cinquième.Je reconnais n'en être qu'au début,le plus dur n'est pas de suivre les cours de "code::blocks"; mais d'avoir des indications lorsque l'on a un blocage sur l'exécution de protocoles de compilation de programme.Il n'est pas utile de se moquer ou de me reprendre sur d'éventuelles erreurs d'expressions, j'en ferais sans doute beaucoup! Ce que je peux dire, c'est qu'après avoir pompé le maximum de données sur ce site, j'ai dû aller chercher sur d'autres pour trouver les indications nécessaires à la "compil" de mes "progs".(réussies!...,je continue les cours et je m'améliore!...)
Je n'ai pas envie de me faire chambrer, j'ai d'autres préoccupations. Si j'ai eu envie d'écrire ceci c'est surtout que je ne perçois que peu d'entraide sur ce site, malgré les efforts de quelque-uns, et je trouve cela dommageable. L'étalage des acquis me fatigue; j'aime mieux le partage et la stimulation.Peut-être que je lirais les réponses, mais c'est pas sûr,je vais sur un autre site!(désolé d'avoir été si long,mais j'avais envie de le dire)
  • Partager sur Facebook
  • Partager sur Twitter
29 décembre 2009 à 14:36:24

T'as pas tort, mais pour cela, il faudrait aller sur un site où la moyenne d'age, est superieur aux 25 ans :-°
Qaund on est jeune, on a besoin de montrer qu'on sait des choses :p (je le sais, c'est pareil pour moi)


PS: T'es pas sur le bon forum ^^
  • Partager sur Facebook
  • Partager sur Twitter
- Il y a un chemin vers chaque sommet, même le plus haut -