Je suis actuellement en cours de formation cs50, je suis en train de résoudre le problème de chiffrement César et j'ai rencontré un problème.
#include <cs50.h> #include <stdio.h> #include <ctype.h> #include <stdlib.h> #include <string.h> // argument count, array of strings int main (int argc, string argv[]) { //checking there is only one command line argument, checking if digit if (argc == 2 && isdigit(*argv[1])) { //atoi converts string to int int k = atoi(argv[1]); //get plaintext string s = get_string ("Plain text: "); printf("ciphertext: \n"); if (argc !=2) printf("Usage: ./ceasar\n"); } }
Je ne parviens pas à faire imprimer mon programme "Utilisation: ./caesar"
Si j'entre ./cipher 2, il renvoie
Plaintext:
mais si j'entre, dis ./caesar g
, il revient à une ligne vide dans le terminal.
Toute aide serait appréciée.
3 Réponses :
Vous manquez une branche else
:
if (argc == 2 && isdigit(*argv[1])) { //atoi converts string to int int k = atoi(argv[1]); //get plaintext string s = get_string ("Plain text: "); printf("ciphertext: \n"); ... // the rest of your code } else { printf("Usage: ./ceasar\n"); // You mean Usage: ./ceasar param }
merci david, je me rends compte aussi que je n'ai pas besoin (argc! = 2) je peux m'en débarrasser simplement en utilisant un autre comme vous l'avez suggéré, je sentais que c'était quelque chose que je négligeais, je ne pouvais tout simplement pas comprendre, merci pour prendre le temps de m'aider, je suis au début de mon apprentissage
Il est préférable de vérifier d'abord les arguments et de quitter plus tôt. Voici un lien pour exécuter le code. Vous en aurez peut-être besoin plus tard lorsque vous rencontrerez des défauts de segmentation.
#include <cs50.h> #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> // argument count, array of strings int main(int argc, string argv[]) { if (argc != 2) { printf("Usage: ./ceasar\n"); exit (1); } // checking there is only one command line argument, checking if digit if (argc == 2 && isdigit(*argv[1])) { // atoi converts string to int int k = atoi(argv[1]); // get plaintext string s = get_string("Plain text: "); printf("ciphertext: \n"); } return 0; }
merci pour la réponse, marquez le site pour vérifier le code à coup sûr, j'aime l'idée de vérifier d'abord les arguments, donc pas besoin de parcourir tout le programme, je vais le rappeler. Merci pour votre temps!
Votre condition if n'a pas d'autre branche,
if (argc == 2 && isdigit(*argv[1])) { //Your code } else { //Else code if your condition fails }
vérifie si l'entrée est un chiffre, si g
est entré, la condition échoue et le code dans le si le bloc
n'est pas exécuté et que le programme se termine avec le code de sortie 0. Utilisez:
if (argc == 2 && isdigit(*argv[1]))
C'est un bon exemple pour lequel vous devez indenter votre code correctement. Cela vous sauterait aux yeux avec une indentation appropriée.