My assignment: -
Write a program that replaces the occurence of a given character (say c) in a primary string (say PS) with another string (say s).
Input: The first line contains the primary string (PS) The next line contains a character (c) The next line contains a string (s)
Output: Print the string PS with every occurence of c replaced by s.
Test case 1: -
Input: -
abcxy
b
mf
Expected output: -
amfcxy
Test case 2: -
Input: -
Al@bal#20owL
l
LL
Expected output: -
ALL@baLL#20owL
My code below: -
#include <stdio.h>
#include <stdlib.h>
int main() {
    char PS[101];
    char c;
    char S[11];
    
    fgets(PS, 101, stdin);          //PS value input.
    
    scanf("%c", &c);
    if (c == '\n' || c == '\0') {
        scanf("%c", &c);              //Clearing the buffer. I want the real value of 'c' from STDIN not '\n'
    }
    fgets(S, 11, stdin);            //S value input.
    
    int i = 0;
    while (PS[i] != '\0') {          //Removing the '\n' from PS
        if (PS[i] == '\n') {
            PS[i] = '\0';
            break;
        }
        i++;
    }
    i = i - 1;                      //i now holds the value of the size of the string PS (excluding '\0')
    
    int j = 0;
    while (S[j] != '\0') {
        if (S[j] == '\n') {
            S[j] = '\0';
            break;
        }
        j++;
    }
    j = j - 1;                      //j now holds the value of the size of the string S (excluding '\0')
    
    int k = 0;                      //work as an initializer
    int move = 0;                   //work as an initializer.
    
    while (PS[k] != '\0') {         //This loops checks the whole array for the same character mentioned in char 'c'
        if (PS[k] == c) {
            for (move = i; move > k; move --) {   //This loop advances the all the characters in PS by '(j - 1)' steps to make space for string S characters.
                PS[move + (j - 1)] = PS[move];
            }
            
            for (move = 0; move < j; move++) {    //This loop adds all the characters of string S into string PS at the relevant place.
                PS[k + move] = S[move];
            }
            
            i = i + (j - 1);                    // 'i' now holds the new value of size of string PS after adding all the characters of string S.
        }
        k++;
    }
    
    puts(PS);
    
    return 0;
}
Now the problem is that the code is not taking the input for string S.
After inputting first 2 inputs, it executes and gives a gibberish answer. I cannot figure out the bug, but what I do know is that there is some issue related to the buffer in C. Please help.
Edit: -
Thanks to @WeatherVane I have now edited the code with this: -
    scanf("%c", &c);
    if (c == '\n' || c == '\0') {
        scanf("%c", &c);              //Clearing the buffer. I want the real value of 'c' from STDIN not '\n'
    }
    
    char x;
    x = getchar();                    //New addition. It eats the '\n' after scanf().
    
    fgets(S, 11, stdin);            //S value input.
Now my code is working fine but the output is still not correct. It is sometimes failing to copy the last char from string S or giving me gibberish output.
 
    