1
votes

Impossible d'obtenir mon programme pour imprimer "Utilisation: ./caesar"

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.


1 commentaires

C'est un bon exemple pour lequel vous devez indenter votre code correctement. Cela vous sauterait aux yeux avec une indentation appropriée.


3 Réponses :


1
votes

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
}


1 commentaires

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



0
votes

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;
}


1 commentaires

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!



0
votes

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]))


0 commentaires