Home > Back-end >  C code acting weird. Sometimes, it takes input, sometimes it doesn't
C code acting weird. Sometimes, it takes input, sometimes it doesn't

Time:11-22

I'm making a multi-feature command-line application where users have features like encrypt-decrypt a string, check string palindrome and reverse a string, and I started to write my whole code with the encrypt-decrypt feature, but apparently it is not working as expected, sometimes it encrypts/decrypts the string, the same code when executed again exits itself without taking the string input! I have even inserted the fflush(stdin), but no luck!

#include <stdio.h>

void encryptDecrypt();
// void checkPalindrome();
// void reverseWord();

void main()
{
    int choice;
    printf("\nWelcome to Jeel's multi-feature C App\n\n");
    printf("1. Encrypt-Decrypt a word\t2. Check Palindrome\t3. Reverse a word\n\n");
    printf("Enter a feature: ");
    scanf("%d", &choice);
    switch (choice)
    {
    case 1:
        fflush(stdin);
        encryptDecrypt();
        break;

    case 2:
        // checkPalindrome();
        break;

    case 3:
        // reverseWord();
        break;

    default:
        break;
    }
}

void encryptDecrypt()
{
    fflush(stdin);
    char eOrD;
    printf("\nWelcome to the World of Encryption & Decryption! We're so glad that you're here!\n\n");
    printf("Enter 'e' if you want to encrypt a word or 'd' if you want to decrypt a word (e/d): ");
    scanf("%c", &eOrD);
    if (eOrD == 'e' || eOrD == 'E')
    {
        fflush(stdin);
        char *word;
        printf("\nGreat! Now enter a word to encrypt it: ");
        fflush(stdin);
        gets(word);

        char *ptr = word;
        for (int i = 0; i < sizeof(ptr); i  )
        {
            if (*ptr != '\0')
            {
                *ptr = *ptr   7;
                ptr  ;
            }
        }
        printf("\nEncrypted string is: %s, which is encrypted with the key: %d", word, 7);
    }
    else if (eOrD == 'd' || eOrD == 'D')
    {
        fflush(stdin);
        char *deWord;
        printf("\nGreat! Now enter a word to decrypt it: ");
        gets(deWord);
        char *dePtr = deWord;
        for (int i = 0; i < sizeof(dePtr); i  )
        {
            if (*dePtr != '\0')
            {
                *dePtr = *dePtr - 7;
                dePtr  ;
            }
        }
        printf("\nDecrypted string is: %s, which is decrypted with the key: %d\n", deWord, 7);
    }
    else
    {
        printf("Invalid input! Please try again!");
    }
}

CodePudding user response:

The best and most portable way to clear the stdin is using this:

void clearStream()
{
    int c;
    while ((c = getchar()) != '\n' && c != EOF) { }
}

Also the following is incorrect, create an array instead of the pointer:

char *word;
gets(word); //word is a pointer, gets will not create a block of memory for it
  •  Tags:  
  • c
  • Related