0

Just trying to finish the Caesar problem please see my code below:

// INCLUDE THE APPROPRIATE LIBRARIES

#include <math.h>
#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

int eoc;
int feoc;
int eolc;
int feolc;

// INITIALIZE PROGRAMME THAT REQUIRES A COMMAND LINE ARGUMENT

int main (int argc, string argv[])

// OBTAIN A VALID KEY INPUT FROM USER

{

int minimumkeyinput = 2;

if (argc < minimumkeyinput)

{

printf("Caesar requires a Key input in order to execute e.g. ./caesar  2\n");

return 1;

}

// KEY CONVERSION (kc) DECLARED AS AN INT CONVERTED FROM ARGV

int kc = atoi(argv[1]);

if (kc < 0)

// ENSURE A POSITIVE INTEGER IS GIVEN AS PROGRAMME "KEY"
{

printf("programme requires a positive integer in order to execute\n");

return 1;

}

        // OBTAIN PLAIN TEXT INPUT (pti) FROM USER

        string pti;

        do

        {

        printf("plaintext: ");

        pti = get_string();

        }

        while (pti == NULL);


                // BEGIN ENCRYPTION PROCESS OF PLAINTEXT INPUT

                printf("ciphertext: ");

                int ptic = strlen(pti);

                // ITERATE OVER PLAINTEXT

                int ptii = 0;

                for (; ptii <= ptic; ptii++)

                {

                    // SHIFT THE CHARACTERS OF PLAINTEXT INPUT (pti) TO ENCRYPTED OUTPUT (eo) BY USER KEY CONVERSION (kc)

                    // CONVERT USER INPUTS ENCRYPTION RESULT INTO AN ALPHABETICAL INDEX

                    // LOOP AROUND THE APLHABET IF REQUIRED BEFORE PRINTING TO SCREEN (UPPPERCASE ASCII 65-90)

                    eoc = (pti[ptii] -65 + kc) %26;


                    // LIMITING THE SCOPE OF THE UPPERCASE LOOP

                    // CONVERT CHARACTERS FROM ALPHABETICAL INDEX BACK TO ASCII INDEX (UPPERCASE)

                    if (isalpha (pti[ptii]))

                    {

                    if isupper (pti[ptii])

                    {

                        feoc = eoc + 65;

                        printf("%c", feoc);
                    }


                        // LOOP AROUND ALPHABET IF REQUIRED BEFORE PRINTNG TO SCREEN (LOWERCASE ASCII 97 - 122)

                        // LIMIT THE SCOPE OF THE LOWERCASE LOOP

                        if islower (pti[ptii])

                        {

                            eolc = (pti[ptii] -97 + kc) %26;

                            // CONVERT CHARACTERS FROM ALPHABETICAL INDEX BACK TO ASCII INDEX (LOWERCASE)

                            feolc = eolc + 97;

                            printf("%c", feolc);

                        }


                    }

            if (isalpha (pti[ptii]) == false)

                        {

                            printf("%c", pti[ptii]);

                        }

    }

    printf("\n");

}

Unfortunately I am still getting the following fail messages when I run 'check50'

:) caesar.c exists.
:) caesar.c compiles.
:( encrypts "a" as "b" using 1 as key
expected "ciphertext: b\n", not "ciphertext: b\x..."
:( encrypts "barfoo" as "yxocll" using 23 as key
expected "ciphertext: yxo...", not "ciphertext: yxo..."
:( encrypts "BARFOO" as "EDUIRR" using 3 as key
expected "ciphertext: EDU...", not "ciphertext: EDU..."
:( encrypts "BaRFoo" as "FeVJss" using 4 as key
expected "ciphertext: FeV...", not "ciphertext: FeV..."
:( encrypts "barfoo" as "onesbb" using 65 as key
expected "ciphertext: one...", not "ciphertext: one..."
:( encrypts "world, say hello!" as "iadxp, emk tqxxa!" using 12 as key
expected "ciphertext: iad...", not "ciphertext: iad..."
:) handles lack of argv[1]

Can anyone please help?

Running the examples of 'check50' myself, the outputs look fine. I think it may be that the computer is reading the data differently than how it looks on the screen if you understand what I mean.

My guess here is that I have missed one simple step however I cannot find it for the life of me.

All help and input on my code is appreciated.

Thank you in advance,

PotNoodle.

2

It seems as if you're printing the null terminator.

Try ptii < ptic instead of ptii <= ptic.

| improve this answer | |
  • Dude your a wizard. I don't know how you spotted that so quickly but thank you. – Pot Noodle Jan 29 '18 at 11:09
  • thanks for your help Blauelf :) :) :) :) – Pot Noodle Jan 29 '18 at 11:10

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .