/*Sous Windows (et sous beaucoup d’autres systèmes d’exploitation), certains caractères
spéciaux sont utilisés par le système pour son fonctionnement interne. De ce fait, le nom d’un fichier ne
peut pas par exemple contenir les caractères \ / " * : | ? < >
Ecrire un programme qui demande à l’utilisateur le nom qu’il souhaite donner à son fichier et lui dit s’il
est correct (ne contient pas de caractère non autorisé) ou pas. Dans le cas où le nom renseigné est
incorrect, le programme devra lui proposer un nom adéquat (remplacement des caractères interdits par
le caractère underscore)*/
#include<stdio.h>
#include<string.h>
int main()
{
char nomfichier[15];
printf("Veuillez entrer le nom de votre fichier: ");
fgets(nomfichier,30,stdin);
for(int i = 0; nomfichier[i] != '\0'; i++)
{
if(nomfichier[i] == ' ' || nomfichier[i] == '*'|| nomfichier[i] == '?' || nomfichier[i] == ':' || nomfichier[i] == '"' || nomfichier[i] == '<' || nomfichier[i] == '>' || nomfichier[i] == '/' )
{
printf("Ces caractéres sont spéciaux. Ils ne sont pas permis pour l'écriture des noms de fichier.\n Voici des recommandations de nom: ");
break;
}
else
{
printf("Votre nom de fichier a été enregistré avec succés.")
}
}
}
l'enoncé est en haut(sous forme de commentaire) j'ai pas mis tous les caractéres spéciaux(je le ferai)
Mon probléme est comment je dois faire pour suggérer des recommandations de nom à l'utilisateur.
Merci d'avance!
- Edité par FatimatouZahraTALL 7 septembre 2021 à 17:25:29
Et bien tu parcours la chaîne de caractère, caractère par caractère à l'aide d'une boucle (C'est déjà ce que tu fais dans ton code) et si tu tombe sur un caractère interdit tu le remplaces par le caractère underscore (Au lieu d'écrire ton message à chaque fois que tu en trouve un).
Au lieu d'afficher que les caractères sont invalides dans la boucle for suivi du if, tu fais: nomfichier[i] = '_'; Tu devras enlever ton break, sinon tu ne verras que le premier caractère invalide. le else n'a pas sa place. Tu devras trouver un auttre truc pour savoir si le nom est bien valide.
Le Tout est souvent plus grand que la somme de ses parties.
Et bien tu parcours la chaîne de caractère, caractère par caractère à l'aide d'une boucle (C'est déjà ce que tu fais dans ton code) et si tu tombe sur un caractère interdit tu le remplaces par le caractère underscore (Au lieu d'écrire ton message à chaque fois que tu en trouve un).
Parce que ce n'est pas évident que de parcourir la chaîne deux fois est moins efficace? Quel est le but de l'exercice? Détecter si le nom a des caractères invalides?Ou les corriger? Par quoi devrait-on remplacer un caractère invalide si ça résulte d'une erreur?
Le Tout est souvent plus grand que la somme de ses parties.
Sous Windows (et sous beaucoup d’autres systèmes d’exploitation), certains caractères spéciaux sont utilisés par le système pour son fonctionnement interne. De ce fait, le nom d’un fichier ne peut pas par exemple contenir les caractères \ / " * : | ? < >
Ecrire un programme qui demande à l’utilisateur le nom qu’il souhaite donner à son fichier et lui dit s’il est correct (ne contient pas de caractère non autorisé) ou pas. Dans le cas où le nom renseigné est incorrect, le programme devra lui proposer un nom adéquat (remplacement des caractères interdits par le caractère underscore)
Merci pour la précision. Et si l'utilisateur n'accepte pas la proposition? Ça se fait en une seule boucle que de remplacer les caractères interdits par '_' et combien de remplacements ont été effectués. Dans le main, on affiche la réponse appropriée.
Le Tout est souvent plus grand que la somme de ses parties.
Enseigner qu'il faut parcourir la chaîne deux fois est-elle une meilleure pratique? Je parcours la chaîne une première fois pour savoir s'il y a des caractères invalides. Si oui, je la parcours une autre fois pour les remplacer. Désolé, mais je ne suis pas d'accord que ce soit une bonne pratique à enseigner. Le premier parcours ne nous apprend qu'une chose. C'est qu'il y a des caractères invalides. Si on doit parcourir la chaîne une autre fois, le premier parcours ne nous apprend rien et n'est pas utile dans ce cas. Il faudra tout de même retrouver ces caractères invalides.
Le Tout est souvent plus grand que la somme de ses parties.
On enseigne (on essaie, au moins) qu'il faut découper son code en actions simples clairement identifiables. Et utilisables dans différents contextes, pour les tester à part, par exemple.
Sinon la tendance naturelle du débutant, c'est de faire des fonctions bric à brac qui mélangent calcul , entrées sorties et dialogue utilisateur (pourquoi s'embeter à faire des fonctions, hein, c'est du boulot, c'est compliqué, et ça ralentit, finalement)
L'action "remplacer tous les caractères interdits et retourner combien il y en avait" est envisageable mais n'est pas simple. Elle ne permet pas de tester si il y a des caractères interdits sans modifier.
On peut interpréter le sujet en dissociant les deux : si il y a des caractères interdits, demander si il faut les remplacer et continuer, ou plutôt abandonner l'action en cours.
- Edité par michelbillaud 17 septembre 2021 à 6:52:35
On enseigne (on essaie, au moins) qu'il faut découper son code en actions simples clairement identifiables. Et utilisables dans différents contextes, pour les tester à part, par exemple.
Sinon la tendance naturelle du débutant, c'est de faire des fonctions bric à brac qui mélangent calcul , entrées sorties et dialogue utilisateur (pourquoi s'embeter à faire des fonctions, hein, c'est du boulot, c'est compliqué, et ça ralentit, finalement)
L'action "remplacer tous les caractères interdits et retourner combien il y en avait" est envisageable mais n'est pas simple. Elle ne permet pas de tester si il y a des caractères interdits sans modifier.
On peut interpréter le sujet en dissociant les deux : si il y a des caractères interdits, demander si il faut les remplacer et continuer, ou plutôt abandonner l'action en cours.
- Edité par michelbillaud il y a 23 minutes
D'accord avec l'idée. On en vient à l'idée que les débutants ne savent pas comment exprimer leurs besoins. Faut pas les blâmer tout de même.
S'ils savaient qu'on peut sauver beaucoup de code et de temps en écrivant les fonctions appropriées et de façon appropriée également.
Le Tout est souvent plus grand que la somme de ses parties.
Il ne s'agit pas de les blâmer pour des choses qu'ils ne peuvent pas connaître au départ. Justement parce qu'ils sont là pour les apprendre.
Si on les engueule quand ils ne le font pas alors qu'on leur a déjà dit, c'est de juste de la pédagogie, pour qu'ils s'en souviennent. Rien de personnel.
Et quand on les frappe, c'est pas qu'on est en colère contre eux. Il ne faut jamais essayé de frapper les gens quand on est énervé, on risque trop de les louper.
- Edité par michelbillaud 17 septembre 2021 à 14:27:24
nom de fichier(chaine de caractére)
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.