Arguments de la fonction main()
Bonjour à tous,
Je viens d'intégrer un IUT informatique en année spéciale, et je débute le C. Pour m'amuser (et m'entrainer) je me suis lancé dans l'écriture d'un programme de cryptage de données par la méthode du Chiffre de César (cryptage par décalage) qui consiste à décaler de x lettres chaque lettre. Petit exemple, on décale de 1 : "Salut" -> "Tbmvu" etc.
Je rencontre un petit soucis au niveau des arguments de la fonction main, mon but est d'entrer en paramètres la clef de cryptage (1,2,3 ...) et le mot à crypter (SALUT...). J'aurai plus de mal à expliquer la source de mon problème que le compilateur. Voilà le code, si quelqu'un saurait d'où vient le problème, je lui crypte son pseudo gratuitement ! :D
Le compilateur renvoi "main.c|120|error: assignment to expression with array type|" . Pourtant ce sont deux chaines de caractères !
Cordialement,
Haz
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
| #include <stdio.h>
#include <stdbool.h>
const char alphabet[26] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
bool isUpperCase (char message[]) {
bool up = true;
char c = message[0];
int i = 0;
while (up && c != '\0') {
if (c != ' ') {
int y = 0;
bool isAlph = false;
char alph = alphabet[0];
while (!isAlph && alph != 0) {
alph = alphabet[y];
if (alph == c){
isAlph = true;
}
y++;
}
if (!isAlph){
up = false;
}
}
i++;
c = message[i];
}
return up;
}
int indexC (char c) {
int ind = -1;
bool isOK = false;
while (!isOK) {
ind++;
if (c == alphabet[ind]) {
isOK = true;
}
}
return ind;
}
void chiffreCesar (char message[], int clef) {
int i = 0;
char c = message[0];
while (c != '\0') {
if (c != ' ') {
int indexNewC = (indexC(c)+clef)%26;
message[i] = alphabet[indexNewC];
}
i++;
c = message[i];
}
}
int power (int x, int n) {
int result = 1;
int i = 0;
while (i<n) {
result*=x;
i++;
}
return result;
}
bool stringToInt (char chaine[], int *clef) {
int result = 0;
char c = chaine[0];
int nbChar = 0;
bool isOK = true;
while (isOK && c != '0') {
nbChar++;
c = chaine[nbChar];
if ('0' > c && c > '9') {
isOK = false;
}
}
while (isOK && nbChar > 0) {
nbChar--;
int val = (int)chaine[nbChar]-48;
result += power(val,nbChar);
}
*clef = result;
return isOK;
}
int main (int argc, char *argv[]) {
char message[] = "Erreur";
int clef = 0;
if (argc == 3) {
message = argv[1]; // C'est ici qu'à lieu l'accident ! *************************************************************************************
if (isUpperCase(message)) {
printf("%s est bien en majuscules !\n", message);
chiffreCesar(message, clef);
printf("%s est la version cryptée avec une clef qui vaut %d !\n", message, clef);
}
else {
printf("%s n'est pas en majuscules !\n", message);
}
}
else {
printf("Veuillez indiquer deux paramètres tels que : ./cesar MOT clef\n");
}
return 0;
} |