Partage

Problèmes projet cryptographie c++ qt débutant.

13 septembre 2017 à 18:58:18

Bonswar.

J'ai comme projet de developper un petit programme de cryptographie tout mignon, mais les problèmes de débutants s'entassent à un point particulier...

Mon but dans un premier temps est d'assimiler la première lettre d'un string obtenu par un QLineEdit à un chiffre.

ex : si m_text[0] = a, m_numérotAssimilé = 1.

Voici mon code :

crypto.h

#ifndef CRYPTO_H
#define CRYPTO_H

#include <QWidget>
#include <QApplication>
#include <QLineEdit>
#include <QString>
#include <QMessageBox>
#include <QPushButton>

class Crypto : public QWidget
{

        Q_OBJECT

public:
    Crypto();

public slots:
    void launch();

private :
    QLineEdit *m_getString;
    QPushButton *m_bouton;
    int m_a1;





};

crypto.cpp

#include "crypto.h"

Crypto::Crypto() : QWidget()
{

setFixedSize(450, 200);

m_getString = new QLineEdit(this);
m_getString -> move(165, 98);

m_bouton = new QPushButton(this);
m_bouton -> move(180, 150);
m_bouton -> setFixedSize(100, 30);
m_bouton -> setCursor(Qt::PointingHandCursor);

QObject::connect(m_bouton,SIGNAL(clicked()),this,SLOT(launch()));

}

void Crypto::launch()
{

    QString input;
    input = m_getString -> text();

    while(!m_converti=="1"||"2"||"3"||"4"||"5"||"6"||"7"||"8"||"9")
    {

        if(m_getString[0]=="a")
        {
            m_converti="1";
        }

    }


}

Je me tappe un "ISO C++ forbids comparison between pointer ansd integer" à la ligne du "while",

un C:\Users\TJ\Desktop\Crypto1\crypto.cpp:29: error: no match for 'operator==' (operand types are 'QLineEdit' and 'const char [2]')

         if(m_getString[0]=="a")

                          ^

et C:\Users\TJ\Desktop\Crypto1\crypto.cpp:31: error: invalid conversion from 'const char*' to 'int' [-fpermissive]

             m_converti="1";

                       ^

Merci d'avance !!



-
Edité par Syrotiilk 13 septembre 2017 à 19:09:40

13 septembre 2017 à 19:04:33

Lu'!

Je pense que t'attaquer à un morceau comme Qt alors que pour l'instant, même les notions de chaîne de caractères ou de condition de boucle semblent obscures pour toi. C'est chaud. Pour ne pas dire impossible.

(Note: le mot "cryptage" n'existe pas. On parle de chiffrement, déchiffrement, décryptage (qui n'est pas équivalent au déchiffrement), mais pas de cryptage).

-
Edité par Ksass`Peuk 13 septembre 2017 à 19:05:08

RTFM [C++][FaqC++][Boost][Qt] "Tout devrait être rendu aussi simple que possible, mais pas plus." Einstein. ZesteDeSavoir: SDZ Reborn.
13 septembre 2017 à 19:11:34

Mais le problème ici vient de notions de boucles ?

Ou est-ce un problème de sytaxe lié à qt ou des erreurs dans mes variables ?

13 septembre 2017 à 19:14:40

Syrotiilk a écrit:

Ou est-ce un problème de sytaxe lié à qt ou des erreurs dans mes variables ?

C'est un problème de syntaxe avec les bases de C++ (comment écrire une expression booléenne correcte et qu'est ce qu'une chaîne de caractère/un caractère et comment on les définit).

RTFM [C++][FaqC++][Boost][Qt] "Tout devrait être rendu aussi simple que possible, mais pas plus." Einstein. ZesteDeSavoir: SDZ Reborn.
13 septembre 2017 à 19:16:43

Pourrais-tu m'en dire plus, afin que je puisse trouver l'érreur et progresser autant dans mon programme que dans mon apprentissage du c++ ?
13 septembre 2017 à 20:09:34

Ben selon toi, qu'est ce que ça veut dire ça en C++ :

!m_converti=="1"||"2"||"3"||"4"||"5"||"6"||"7"||"8"||"9"

Et je veux dire pas "ce que tu veux dire", mais ce que ça veut dire si tu regardes un cours.

Ensuite, quel est le type de :

m_getString[0]

Et quel est le type de :

"a"

Donc qu'est ce qui est incohérent dans :

m_getString[0]=="a"
RTFM [C++][FaqC++][Boost][Qt] "Tout devrait être rendu aussi simple que possible, mais pas plus." Einstein. ZesteDeSavoir: SDZ Reborn.
13 septembre 2017 à 22:16:01

1) pour moi, cela veu dire "si m_converti n'est pas égale a "1", ni "2" ni "3" etc... Et dans la boucle while, cela se traduit en "tant que m_converti n'est pas égale à 1...9, recommencer ce processus.

2)m_getString est un QString, qui peu contenir des chaînes de texte. Il est donc logique que "a" qui est une lettre, puisse by être stocké. Donc if(m_getString=="a") veu dire "si la première lettre de ce QString est "a"".

Je ne vois toujours pas le problème. Merci d'avance.

14 septembre 2017 à 0:02:42

Le point sur lequel Ksaas'Peuk veut attirer ton attention est quel est le type de "1" ? Quelle est le sens "1" || "2"... ? Partant de là m_converti == "1" || "2"... ? Ces questions montrent que Ksaas'Peuk a raison quand il laisse entendre très diplomatiquement que tu es très loin d'avoir le niveau suffisant pour pouvoir envisager d'aborder Qt sereinement...
Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug
14 septembre 2017 à 7:00:52

Et bien à moins de m'être astronomiquement trompé, je suis parti sur le principe que "1" etant un nombre, peu être contenu dans m_converti, qui est de type int. Et donc si "m_converti==1||2||3..." Veu dire "si cette variable est égal à 1ou2ou3..." Le point d'exclamation transforme le tout en "si cette variable n' est PAS égale a1,ni2ni2 etc..."
14 septembre 2017 à 7:24:22

Tu t'es astronomiquement trompé...
Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug
14 septembre 2017 à 9:25:41

Syrotiilk a écrit:

1) pour moi, cela veu dire "si m_converti n'est pas égale a "1", ni "2" ni "3" etc...

Oui ça je me doutais que c'est que tu veux dire, sauf que l'ordre d'application des opérateurs étant ce qu'il est, ce n'est pas ça. Là ton code est équivalent à :

! (m_converti== ("1"||"2"||"3"||"4"||"5"||"6"||"7"||"8"||"9"))

La grosse expression à l'arrière étant composée de char const* qui sont tous non nuls, c'est équivalent à :

!(m_converti == true)

Syrotiilk a écrit:

2)m_getString est un QString, qui peu contenir des chaînes de texte. Il est donc logique que "a" qui est une lettre, puisse by être stocké.

Non "a" n'est pas une lettre, c'est une chaîne de caractères de taille 1 donc la case 0 est 'a'.

Syrotiilk a écrit:

je suis parti sur le principe que "1" etant un nombre

Non "1" n'est pas un nombre, c'est une chaîne de caractères de taille 1 dont la case 0 est '1'.

D'où ma remarque depuis le début : commence par acquérir les bases.

RTFM [C++][FaqC++][Boost][Qt] "Tout devrait être rendu aussi simple que possible, mais pas plus." Einstein. ZesteDeSavoir: SDZ Reborn.
14 septembre 2017 à 12:46:06

Ok, je vois que tu vois mes erreurs. Mais pour acquérir les bases,  c'est efficace d'avoir une conversation construite avec un personne de connaissances supperieurs (donc toi). Tu pourrais par exemple comparer ce que j'ai fait à ce qu'il faut faire, et m'aider à acquérir les bases, car me dire que tt est faux sans rien d'autre (même si tu veu me pousser à retourner au début) ne m'aide pas ici. Pourrais tu reelement m'aider s'il te plaît ? 

Merci de ton temps et de ta future aide.

14 septembre 2017 à 13:43:32

Syrotiilk a écrit:

Mais pour acquérir les bases,  c'est efficace d'avoir une conversation construite avec un personne de connaissances supperieurs (donc toi).

Non, il serait bien plus efficace d'aller étudier un cours correctement (pas le lire en survolant, sans faire d'exercices après chaque étape d'apprentissage). Notamment parce que ça permet de poser des questions précises. Le code que tu as en haut est tellement loin de pouvoir fonctionner que je vois à peine ce que tu essaies de faire dedans.

Je pourrais bien t'écrire :

std::string s = "une chaine a chiffrer" ;

std::string result ;
for(char c : s) result.push_back(c - 'a');

Mais ça ne va pas t'avancer parce que tu n'auras toujours pas les bases qu'il te manque.

Syrotiilk a écrit:

Pourrais tu reelement m'aider s'il te plaît ?

Aide-toi toi-même : prends ton apprentissage dans l'ordre plutôt que d'attaquer Qt sans même savoir ce qu'est une chaîne de caractères.

La programmation ça ne s'improvise pas sur un coup de tête, ça s'apprend sérieusement. Notamment en étudiant et expérimentant vraiment les notions dont on apprend l'existence au cours de l'apprentissage, et surtout par la production d'un grand nombre d'exercices.

RTFM [C++][FaqC++][Boost][Qt] "Tout devrait être rendu aussi simple que possible, mais pas plus." Einstein. ZesteDeSavoir: SDZ Reborn.

Problèmes projet cryptographie c++ qt débutant.

× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
  • Editeur
  • Markdown