I have refactored the code following the guidelines given here. However, I have the initial problem again ... I choose the desired option, it performs the desired action but then goes to the default case switch and prints "invalid information"
My code looks like this:
#include <string.h>
#include <stdio.h>
#define TAM 20
#include <ctype.h>
int menu(){
char opc;
printf("| A | Ler string\n");
printf("| B | Tamanho da string1\n");
printf("| C | Comparar strings\n");
printf("| D | Concatenar strings\n");
printf("| E | Imprimir string1 invertida\n");
printf("| F | Quantidade de ocorrencias de um caractere na string1\n");
printf("| G | Subsituir o primeiro caractere1 pelo caractere2\n");
printf("| H | Retornar substring da string1\n");
printf("| I | Sair\n");
scanf("%c", &opc);
return tolower(opc);
}
void pedirstr1(char *str1){
printf("Entre com a string1: ");
fflush(stdin);
fgets(str1, TAM, stdin);
str1[strlen(str1)-1] = '#include <string.h>
#include <stdio.h>
#define TAM 20
#include <ctype.h>
int menu(){
char opc;
printf("| A | Ler string\n");
printf("| B | Tamanho da string1\n");
printf("| C | Comparar strings\n");
printf("| D | Concatenar strings\n");
printf("| E | Imprimir string1 invertida\n");
printf("| F | Quantidade de ocorrencias de um caractere na string1\n");
printf("| G | Subsituir o primeiro caractere1 pelo caractere2\n");
printf("| H | Retornar substring da string1\n");
printf("| I | Sair\n");
scanf("%c", &opc);
return tolower(opc);
}
void pedirstr1(char *str1){
printf("Entre com a string1: ");
fflush(stdin);
fgets(str1, TAM, stdin);
str1[strlen(str1)-1] = '%pre%';
}
void pedirstr2(char *str2){
printf("Entre com a string1: ");
fflush(stdin);
fgets(str2, TAM, stdin);
str2[strlen(str2)-1] = '%pre%';
}
int main(){
char str1[TAM] = " NULL ", str2[TAM] = " NULL ", char1, char2, c, opc = 'f', sair=0, c2, junto[TAM];
int inicio, fim, contchar = 0;
do {
opc = menu();
printf("\n\n");
switch(opc){
case 'a':
//system("CLS");
pedirstr1(str1);
break;
case 'b':
//system("CLS");
if (strcmp(str1, " NULL ") == 0){
printf("Nao existe nenhum valor na string1.\n");
printf("\n\n");
} else {
printf("O tamanho da string1 e: %d\n", strlen(str1));
printf("\n\n");
}
break;
case 'c':
//system("CLS");
pedirstr1(str1);
pedirstr2(str2);
if (strcmpi(str1, str2) == 0){
printf("As strings 1 e 2 sao iguais.\n");
printf("\n\n");
} else {
printf("As strings 1 e 2 sao diferentes. \n");
printf("\n\n");
}
break;
case 'd':
//system("CLS");
pedirstr1(str1);
pedirstr2(str2);
printf("string1 + string2 = %s%s\n", str1, str2); //posso usar strcat mas da ruim pq fica armazenado na variavel
printf("\n\n");
break;
case 'e':
//system("CLS");
pedirstr1(str1);
printf("String1 invertida: ");
for (c=strlen(str1); c>=0; c--){
printf("%c", str1[c]);
}
printf("\n\n");
break;
case 'f':
//system("CLS");
pedirstr1(str1);
printf("Letra que deseja contar: ");
scanf("%c", &char1);
for (c=0; c<strlen(str1); c++){
if (str1[c] == char1){
contchar ++;
}
}
printf("A letra %c aparece %d vezes na string1.\n", char1, contchar);
printf("\n\n");
break;
case 'g':
//system("CLS");
pedirstr1(str1);
printf("Entre com o caractere que deseja substituir: [diferencie maiusculas de minusculas]");
scanf("%c", &char1);
printf("Qual caractere deseja colocar no lugar? ");
scanf("%c", &char2);
for (c=0; c<strlen(str1); c++){
if (str1[c] == char1){
str1[c] = char2;
}
}
printf("Nova string: %s", str1);
printf("\n\n");
break;
case 'h':
//system("CLS");
pedirstr1(str1);
printf("A partir de qual posicao? ");
scanf("%d", &inicio);
printf("Até onde? ");
scanf("%d", &fim);
while (inicio > fim){
printf("A posicao de inicio deve ser menor do que a do fim. \n");
printf("A partir de qual posicao? ");
scanf("%d", &inicio);
printf("Ate onde? ");
scanf("%d", &fim);
}
printf("Substring: ");
for (c=inicio; c<fim; c++){
printf("%c", str1[c]);
}
printf("\n\n");
break;
case 'i':
sair = 1;
break;
default:
//system("CLS");
printf("Informacao invalida, tente novamente. \n");
printf("\n\n");
break;
}
} while (!sair);
return 0;
}
';
}
void pedirstr2(char *str2){
printf("Entre com a string1: ");
fflush(stdin);
fgets(str2, TAM, stdin);
str2[strlen(str2)-1] = '%pre%';
}
int main(){
char str1[TAM] = " NULL ", str2[TAM] = " NULL ", char1, char2, c, opc = 'f', sair=0, c2, junto[TAM];
int inicio, fim, contchar = 0;
do {
opc = menu();
printf("\n\n");
switch(opc){
case 'a':
//system("CLS");
pedirstr1(str1);
break;
case 'b':
//system("CLS");
if (strcmp(str1, " NULL ") == 0){
printf("Nao existe nenhum valor na string1.\n");
printf("\n\n");
} else {
printf("O tamanho da string1 e: %d\n", strlen(str1));
printf("\n\n");
}
break;
case 'c':
//system("CLS");
pedirstr1(str1);
pedirstr2(str2);
if (strcmpi(str1, str2) == 0){
printf("As strings 1 e 2 sao iguais.\n");
printf("\n\n");
} else {
printf("As strings 1 e 2 sao diferentes. \n");
printf("\n\n");
}
break;
case 'd':
//system("CLS");
pedirstr1(str1);
pedirstr2(str2);
printf("string1 + string2 = %s%s\n", str1, str2); //posso usar strcat mas da ruim pq fica armazenado na variavel
printf("\n\n");
break;
case 'e':
//system("CLS");
pedirstr1(str1);
printf("String1 invertida: ");
for (c=strlen(str1); c>=0; c--){
printf("%c", str1[c]);
}
printf("\n\n");
break;
case 'f':
//system("CLS");
pedirstr1(str1);
printf("Letra que deseja contar: ");
scanf("%c", &char1);
for (c=0; c<strlen(str1); c++){
if (str1[c] == char1){
contchar ++;
}
}
printf("A letra %c aparece %d vezes na string1.\n", char1, contchar);
printf("\n\n");
break;
case 'g':
//system("CLS");
pedirstr1(str1);
printf("Entre com o caractere que deseja substituir: [diferencie maiusculas de minusculas]");
scanf("%c", &char1);
printf("Qual caractere deseja colocar no lugar? ");
scanf("%c", &char2);
for (c=0; c<strlen(str1); c++){
if (str1[c] == char1){
str1[c] = char2;
}
}
printf("Nova string: %s", str1);
printf("\n\n");
break;
case 'h':
//system("CLS");
pedirstr1(str1);
printf("A partir de qual posicao? ");
scanf("%d", &inicio);
printf("Até onde? ");
scanf("%d", &fim);
while (inicio > fim){
printf("A posicao de inicio deve ser menor do que a do fim. \n");
printf("A partir de qual posicao? ");
scanf("%d", &inicio);
printf("Ate onde? ");
scanf("%d", &fim);
}
printf("Substring: ");
for (c=inicio; c<fim; c++){
printf("%c", str1[c]);
}
printf("\n\n");
break;
case 'i':
sair = 1;
break;
default:
//system("CLS");
printf("Informacao invalida, tente novamente. \n");
printf("\n\n");
break;
}
} while (!sair);
return 0;
}