I would like to get some helpful thoughts on this and if there is a way to break it. Is there any point to not use fgets
in that form?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define GETNAME_SIZE 100
char *getPhrase() {
int size;
char phrase[GETNAME_SIZE];
char *phraseHolder;
printf("Enter a phrase:");
fflush(stdout);
if (fgets(phrase,sizeof phrase,stdin) == NULL ) {
return NULL;
}
size = strlen(phrase)+1;
phraseHolder = malloc(size);
if (phraseHolder == NULL) {
return NULL;
}
strcpy(phraseHolder,phrase);
phraseHolder[strcspn(phraseHolder,"\n")] = '\0';
printf("The phrase you introduced is: <%s>\n", phraseHolder);
return phraseHolder;
}
char *getChangedPhrase(char *phrase) {
int size,i,codeSize;
int j = 0;
char *code;
int pace;
size = strlen(phrase)+1;
if(size <2) {
printf("Enter a bigger phrase!");
return NULL;
}
code = malloc(size);
if (code == NULL) {
return NULL;
}
fflush(stdout);
printf("Enter the code that you want to be used with your phrase!(only letters)\n");
if (fgets(code,size,stdin) == NULL) {
return NULL;
}
code[strcspn(code,"\n")] = '\0';
codeSize = strlen(code);
for(i = 0 ; i < size ; i++) {
if(phrase[i] < 65 || (90 < phrase[i] && phrase[i] < 97) || 122<phrase[i] ) {
continue;
}
else {
while(code[j] < 65 || (code[j] > 90 && code[j] < 97) || code[j] > 122 ) {
j++;
}
pace = code[j];
if(code[j] > 96 && code[j] < 123) {
pace = pace - 97;
if(phrase[i] + pace > 122 )
phrase[i] = phrase[i] + pace - 26;
else
if( phrase[i] + pace > 90 && code[j] < 90)
phrase[i] = phrase[i] + pace - 26;
else
if(phrase[i] + pace > 90 && code[j] > 96 && phrase[i] < 91 ) {
phrase[i] = phrase[i] + pace - 26;
}
else
phrase[i] = phrase[i] + pace;
}
else if ( code[j] > 64 && code[j] <91 ) {
pace = pace - 65;
if((phrase[i] < 91 && (phrase[i] + pace) > 90) || (phrase[i] + pace) > 122 )
phrase[i] = (phrase[i] + pace - 26);
else
phrase[i] = phrase[i] + pace;
}
j++;
if(j == codeSize) {
j = 0;
}
}
}
free(code);
phrase[strcspn(phrase,"\n")] = '\0';
return phrase;
}
int main() {
char *phrase = getPhrase();
char *modifiedPhrase = getChangedPhrase(phrase);
printf("The changed phrase is: \n <%s> \n", modifiedPhrase);
//free(phrase);
printf("Press ENTER key to Continue\n");
getchar();
getchar();
}