At the end of the String printout, the 0p always exits. Which is?

0

I made a code to accept only some characters read in one vector and move to another vector. In the case, the first user can type what he wants and the program keeps only digits, mathematical operations (+ - / * ^) and the letters p and i. I was able to do it quietly, but at the time of printing the vector already without the unwanted characters it always prints with a 0p at the end.

int retira_espaco(int tamanho, char vetor[], int t, char retorno []){ //função para retirar os espaços digitados
    int i = 0;
    int contador = 0;
    for (i=0; i<tamanho; i++){
        if (isdigit(vetor[i]) || vetor[i] == 'i' || vetor[i] == 'p' || vetor[i] == '+' || vetor[i] == '-' || vetor[i] == '*' || vetor[i] == '/' || vetor[i] == '^'){
        retorno[contador++] = vetor[i];
    }
}
    retorno[contador] = '
int retira_espaco(int tamanho, char vetor[], int t, char retorno []){ //função para retirar os espaços digitados
    int i = 0;
    int contador = 0;
    for (i=0; i<tamanho; i++){
        if (isdigit(vetor[i]) || vetor[i] == 'i' || vetor[i] == 'p' || vetor[i] == '+' || vetor[i] == '-' || vetor[i] == '*' || vetor[i] == '/' || vetor[i] == '^'){
        retorno[contador++] = vetor[i];
    }
}
    retorno[contador] = '%pre%';
    return (retorno);
}

void main() // função principal
{
int tamanho = 100;
char vetor[tamanho];
char retorno[tamanho];
printf("DIGITE A EXPRESSAO QUE DEVE SER RESOLVIDA:\n");
fgets(vetor, tamanho, stdin);
printf("%s", retira_espaco(tamanho, vetor, tamanho, retorno));
return 0;
}
'; return (retorno); } void main() // função principal { int tamanho = 100; char vetor[tamanho]; char retorno[tamanho]; printf("DIGITE A EXPRESSAO QUE DEVE SER RESOLVIDA:\n"); fgets(vetor, tamanho, stdin); printf("%s", retira_espaco(tamanho, vetor, tamanho, retorno)); return 0; }
    
asked by anonymous 10.09.2016 / 21:39

1 answer

0

You have to test if vetor[i] is non-zero binary, because fgets always puts a binary zero at the end of the typed field. Otherwise the loop proceeds to the end of vetor , and may consider junk (uninitialized memory) as valid characters.

for (i = 0; i < tamanho && vetor[i] != 0; i++)
{
    if (isdigit(vetor[i]) || vetor[i] == 'i' || vetor[i] == 'p'
       || vetor[i] == '+' || vetor[i] == '-' || vetor[i] == '*'
       || vetor[i] == '/' || vetor[i] == '^')
    {
       retorno[contador++] = vetor[i];
    }
}
    
10.09.2016 / 22:12