OVH Cloud OVH Cloud

Problème C++

106 réponses
Avatar
Steph
boujour

J'ai créé un programme dont voici une partie :


#include <iostream>
using namespace std;

int main (void)

{
char pw[20];
const char valide[20]="12H12";

cout << " Password :";
cin >> pw;

while (strcmp(pw,valide) = =1)

{

cout << " ACCESS REFUSED\n ";
cout << " Password :";
cin >> pw;

}


cout << "\n ACCESS GARANTED ";
}

Le problème est que si j'entre seulement le premiere lettre ou chiffre il
accepte alors que celles qui suivent sont fausses. Comment je peux faire
pour que le programme teste un à un les caratères?

merci

6 réponses

7 8 9 10 11
Avatar
kanze
Jean-Marc Bourguet wrote:
Sylvain writes:


[...]
http://msdn2.microsoft.com/en-us/library/ms235367.aspx
(qui me laissa penser que cette fonction était POSIX)


"This POSIX function is deprecated beginning in Visual C++
2005."

C'est une erreur factuelle (flushall n'a jamais fait partie de
POSIX).


Ni du Unix pré-Posix.

"Use the ISO C++ conformant _flushall instead."

Ce n'est pas à interpréter comme "_flushall est défini dans le
C++ ISO", mais comme "nous définissons _flushall et
l'utilisation de ce nom est une extention conforme de ISO
C++".


N'empêche que la formulation de la phrase prête à confusion.
Quand on connaît la norme, et l'histoire des rapports de
Microsoft avec la norme, c'est clair que ton interprètation est
la bonne. Mais si je voyais cette phrase, telle qu'elle est, et
sans tenir compte de ce que je connais de la norme par ailleurs,
je l'interprêterais dans le sens qu'a fait Sylvain.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Avatar
kanze
Sylvain wrote:
kanze wrote on 26/06/2006 11:18:

A priori, quand on parle de « flush » ici (un group C++),
c'est bien de std::ostream::flush qu'on parle, parce que
c'est la seule fonction flush en C++.


ah, quand on "parle", c'est obligeatoirement pour réciter ISO
9899 ?!?


Tu parlais d'une fonction « flush ». C'est la seule fonction
flush que je connais en C++.

désolé mais moi je flushe (tu flushes, il flushe) en tant que
traitement, s'il faut un accès DMA, une int. ou une API
propriétaire supportée par 100% des compilos que j'utilise
cela me va très bien.


Oui, mais quand on parle du C++, on suppose des flux, faute
d'autres précisions. Donc, ostream::flush(), ou à la rigueur,
fflush(). Le C++ ne connaît pas des accès DMA, etc.

Et ça n'a pas de sens d'en parler ici si ça n'est pas au moins
un pseudo-standard. Tout le monde n'utilise pas les mêmes
compilateurs que toi.

tu trouves des fonctions qui ne sont pas dans ma copie de la
norme


oui et alors, c'est interdit par la même norme ?


C'est interdit si elle est déclarée dans un en-tête standard.

Et si la fonction ne fait pas partie de C++, ou au moins une
bibliothèque répandue et portable, genre Boost ou ACE, comment
veux-tu qu'on en discute ici ?

je te conseille de trouver une source plus fiable. Parce que
les fonctions « standard » dont tu parles n'existent ni dans
la norme, ni dans les compilateurs auxquels j'ai accès.


- je n'ai jamais dit « standard »
- je n'utilise pas /tes/ compilos (ma Sparc, avec cc et gcc,
est sous les étagères depuis 10 ans - si quelqu'un veux un
GDM-1962B il est nickel).


Mais je ne démande pas à ce que tu te serves de mes
compilateurs. J'essaies de restreindre mes suggestions à des
fonctions disponibles à peu près partout. De préférence celles
de la norme, qu'on est garanti de trouver partout, mais sinon,
celles d'une bibliothèque portable. Et dans les cas où ce n'est
pas possible, parce qu'aucune solution portable n'existe, je
précise bien les dépendances platforme : qu'on fait comme ça
sous Unix, mais que sous Windows c'est...

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Avatar
Arnaud Meurgues
Jean-Marc Bourguet wrote:

autres des extensions. D'après ce que j'ai compris, MS
s'est mis récemment à déprécier (toutes?) ses extensions qui
n'avaient pas de tels noms.


D'après ce que j'ai constaté, il a même déprécié ce qui n'était pas des
extensions... C'est d'un pénible.

--
Arnaud

Avatar
kanze
Sylvain wrote:
Loïc Joly wrote on 26/06/2006 22:39:

Et grand bien t'en fasse. J'utilise moi aussi en permanence
des tas de fonctions qui ne font pas partie du langage. Par
contre, j'ai une bonne vision que ce qui en fait partie ou
non, afin d'adapter mon programme à d'éventuelles
contraintes de portabilité, et dans un newsgroup, où l'on ne
connait pas l'environnement des gens qui vont lire le
message, il faut aussi prendre ses précautions.


j'exigerais et m'efforcerais à ce type de précautions s'il
s'agissait d'encourager à l'usage d'une telle fonction.

le point partait de "je mets plutot un flush avant chaque
nouvel input". Un développeur normal trouve spontanément 10
façons différentes de le faire;


Comment ? En tant que verbe anglais, « to flush » n'a de
signification que sur un flux en sortie. Et sur les systèmes que
je connais, les fonctions « flush » ou « fflush » ne
s'appliquent que sur les flux de sortie. Je ne sais même pas ce
que ça veut dire, mettre un flush sur un flux d'entrée ?

mes chers interlocuteurs ne trouve qu'à noter que "depuis
quand que cela serait possible" et autre agressions.


Ce n'est pas une aggression ; c'est une simple constatation des
faits. On ne peut pas mettre un « flush » sur un flux
d'entrée. Ça n'est pas possible ; ça n'a même pas de sens,
comme phrase.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Avatar
Jean-Marc Bourguet
"kanze" writes:

"Use the ISO C++ conformant _flushall instead."

Ce n'est pas à interpréter comme "_flushall est défini dans le
C++ ISO", mais comme "nous définissons _flushall et
l'utilisation de ce nom est une extention conforme de ISO
C++".


N'empêche que la formulation de la phrase prête à confusion.


Entierement d'accord (j'avais meme d'abord ecrit "deux phrases, deux
erreurs factuelles" avant de voir qu'il y avait une interpretation
plus favorable a MS), mais comme l'anglais n'est que ma 3ieme langue,
je ne me sentais pas en droit de juger.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org


Avatar
kanze
Jean-Marc Bourguet wrote:
"kanze" writes:

"Use the ISO C++ conformant _flushall instead."

Ce n'est pas à interpréter comme "_flushall est défini
dans le C++ ISO", mais comme "nous définissons _flushall
et l'utilisation de ce nom est une extention conforme de
ISO C++".


N'empêche que la formulation de la phrase prête à confusion.


Entierement d'accord (j'avais meme d'abord ecrit "deux
phrases, deux erreurs factuelles" avant de voir qu'il y avait
une interpretation plus favorable a MS), mais comme l'anglais
n'est que ma 3ieme langue, je ne me sentais pas en droit de
juger.


Comme toute langue naturelle, l'anglais n'est pas toujours aussi
précis que voulu. Si on prend la signification la plus
mot-à-mot, il n'y a pas de doute que l'existance de la fonction
en question est conforme aux exigeances de la norme ISO, ce qui
n'était pas le cas de la fonction qu'elle remplace.
L'interprétation correcte n'est pas tiré par les cheveux, ou
exagérée. Seulement, elle n'est pas la seule possible, et
d'office, je crois qu'intuitivement, la plupart du monde
s'entendrait l'interprétation incorrecte d'abord. Je ne saurais
expliquer pourquoi, mais elle me semble « plus probable ».

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34



7 8 9 10 11