Utilisation de gets et de pointeurs
GrandMaitre9
Messages postés
15
Statut
Membre
-
fiddy Messages postés 11653 Statut Contributeur -
fiddy Messages postés 11653 Statut Contributeur -
Bonjour,
J'ai un petit problème, voici une partie de mon code :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct film
{
nom[50];
}
int main()
{
struct film nom;
printf("Quel est le nom du film"); scanf("%s", film.nom);
printf("%s", film.nom);
getch();
return 0;
}
Ceci est un programme pour lire ce que l'utilisateur met comme nom de film, jusque là, tout va bien si le nom a rentrer est "Terminator", mais ça devient plus compliqué pour "Harry Potter", j'ai donc essayé ceci mais ça ne marche pas.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct film
{
nom[50];
}
int main()
{
struct film nom;
printf("Quel est le nom du film"); gets(film.nom);
printf("%s", film.nom);
getch();
return 0;
}
je ne sais pas vraiment comment placer le gets, est-ce que vous pourriez m'aider à y voir plus clair, s'il-vous-plait ?
Merci.
J'ai un petit problème, voici une partie de mon code :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct film
{
nom[50];
}
int main()
{
struct film nom;
printf("Quel est le nom du film"); scanf("%s", film.nom);
printf("%s", film.nom);
getch();
return 0;
}
Ceci est un programme pour lire ce que l'utilisateur met comme nom de film, jusque là, tout va bien si le nom a rentrer est "Terminator", mais ça devient plus compliqué pour "Harry Potter", j'ai donc essayé ceci mais ça ne marche pas.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct film
{
nom[50];
}
int main()
{
struct film nom;
printf("Quel est le nom du film"); gets(film.nom);
printf("%s", film.nom);
getch();
return 0;
}
je ne sais pas vraiment comment placer le gets, est-ce que vous pourriez m'aider à y voir plus clair, s'il-vous-plait ?
Merci.
A voir également:
- Utilisation de gets et de pointeurs
- Utilisation chromecast - Guide
- Télécharger gratuitement notice d'utilisation - Guide
- Impossible d'utiliser ce numéro de téléphone pour la validation - Forum Gmail
- Impossible de charger les accords de l'utilisateur tv lg - Forum Téléviseurs
- Comment savoir qui utilise mon wifi et le bloquer - Guide
4 réponses
Salut.
ta variable c'est "nom" pas "film", ça devrait même pas compiler.
Pourquoi utiliser gets plutôt que scanf ?
ta variable c'est "nom" pas "film", ça devrait même pas compiler.
Pourquoi utiliser gets plutôt que scanf ?
@Chat Snipeur
Pourquoi utiliser gets plutôt que scanf ?
==> Car s'il rentre "Harry Potter", scanf ne met que "Harry" dans sa variable (il s'arrête au premier espace. En tout cas, sans flags supplémentaires dans le formatage de l'entrée, ce n'est pas possible.
Déjà tes erreurs :
- Oubli du point virgule à la fin de ta déclaration de structure
- Mauvais accès à la variable de ta structure. Tu dois le faire comme ceci:
NOM_VARIABLE_TYPE_STRUCTURE.NOM_VARIABLE <=> nom.nom et pas film.nom
C'est vrai qu'il est préférable d'utiliser gets() car c'est plus facilement contrôlable.
Dans ce cas ton code devrait être comme cela :
Mais tu peut quand même utiliser scanf() grâce à ses flags.
Dans ce cas ton code pourrait ressembler à cela :
=> scanf("%49[^\n]", my_var) en détail :
- %49 pour effectuer un contrôle sur la taille de la saisie
- [] pour préciser une expression rationnelle
- ^\n équivaut à tout sauf (^) le caractère de fin de ligne (\n)
Donc l'entrée correspondra à 49 caractère maximum différents de "\n" (espaces compris)
Cdlt,
Pourquoi utiliser gets plutôt que scanf ?
==> Car s'il rentre "Harry Potter", scanf ne met que "Harry" dans sa variable (il s'arrête au premier espace. En tout cas, sans flags supplémentaires dans le formatage de l'entrée, ce n'est pas possible.
Déjà tes erreurs :
- Oubli du point virgule à la fin de ta déclaration de structure
- Mauvais accès à la variable de ta structure. Tu dois le faire comme ceci:
NOM_VARIABLE_TYPE_STRUCTURE.NOM_VARIABLE <=> nom.nom et pas film.nom
C'est vrai qu'il est préférable d'utiliser gets() car c'est plus facilement contrôlable.
Dans ce cas ton code devrait être comme cela :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct film
{
char nom[50];
};
int main()
{
struct film nom;
printf("Quel est le nom du film");
gets(nom.nom);
printf("%s", nom.nom);
getch();
return 0;
}
Mais tu peut quand même utiliser scanf() grâce à ses flags.
Dans ce cas ton code pourrait ressembler à cela :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct film
{
char nom[50];
};
int main()
{
struct film nom;
printf("Quel est le nom du film");
scanf("%49[^\n]", nom.nom);
printf("%s", nom.nom);
getch();
return 0;
}
=> scanf("%49[^\n]", my_var) en détail :
- %49 pour effectuer un contrôle sur la taille de la saisie
- [] pour préciser une expression rationnelle
- ^\n équivaut à tout sauf (^) le caractère de fin de ligne (\n)
Donc l'entrée correspondra à 49 caractère maximum différents de "\n" (espaces compris)
Cdlt,
Attention, gets() stocke également le caractère '\n' (chose que ne fait pas scanf("%49[^\n]",...). Il faut l'enlever via en remplaçant '\n' par '\0'.
Sinon, gets() est obsolète. Il faut utiliser fgets() (fait la même chose que gets() mais en plus secure) : fgets(nom.nom, sizeof nom.nom, stdin);
Cdlt,
Sinon, gets() est obsolète. Il faut utiliser fgets() (fait la même chose que gets() mais en plus secure) : fgets(nom.nom, sizeof nom.nom, stdin);
Cdlt,