Digitalização, verificação, conversão, copiando valores ... como? -c -

StackOverflow https://stackoverflow.com/questions/2821657

  •  26-09-2019
  •  | 
  •  

Pergunta

Já faz um tempo agora e ainda estou tentando obter um determinado código para funcionar. Fiz algumas perguntas sobre diferentes comandos etc. antes, mas agora espero que este seja o final (combinando todas as perguntas em um código).

Eu basicamente quero:

*Digitalizar uma entrada (deve ser personagem?)

*Verifique se é um número

*Caso contrário, retorne o erro

*Converta esse personagem em um número de flutuação

*Copie o valor para outra variável (eu chamei de IMP aqui)

Aqui está o que eu criei:

Código editado*

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
main(){  
  int digits;
  float imp=0;
  char* alpha;
  do{

    printf("Enter input\n\n");
    scanf("\n%c",alpha);
    digits=isdigit(alpha);
      if(digits==0){
         printf("error\n\n");
      }
     imp=atof(alpha);
  }while(digits==0);

}

O problema é que esse código não funciona ... me dá que o ATOF deve ter um char const e sempre que eu tento alterá -lo, ele continua falhando. Estou frustrado e forçado a perguntar aqui, porque acredito que tentei muito e continuo falhando, mas não ficarei aliviado até que eu funcione XD, então preciso realmente da sua ajuda pessoal.

Por favor, diga -me por que esse código não está funcionando, o que estou fazendo de errado? Ainda estou aprendendo C e realmente aprecio sua ajuda :)

EDITARO erro dado atm é:

Argument no 1 of 'isdigit' must be of type 'const int', not '<ptr>char'

EDITAREsse código compila bem, mas trava quando uma entrada é inserida.

  #include<stdio.h>
  #include<stdlib.h>
  #include<ctype.h>
  main(){  
  int digits;
  float imp=0;
  char* alpha=0;
  do{

   printf("Enter input\n\n");
   scanf("\n%s",alpha);
   digits=(isdigit(alpha[0]));
   imp=atof(alpha);
  }while(digits==0);
 }
Foi útil?

Solução

Por que não ter scanf fazer o atof conversão para você?

 #include <stdio.h>
 int main()
 {  
    float imp=0;
    while (1)
    {
       printf("Enter input\n\n");
       if (scanf("%f", &imp) < 1) break;
    }
    return 0;
}

Seu exemplo mais recente está falhando porque alpha é um ponteiro nulo. Declarar como char alpha[40]; Para alocar espaço para isso. Você provavelmente vai querer usar %40s em sua sequência de formato para evitar scanf de transbordar alpha.

Além disso, use strtod ao invés de atof E você saberá se a conversão foi bem -sucedida (melhor do que o seu método de usar isdigit que falhará em um número inteiro negativo).

Outras dicas

Você provavelmente precisa usar %s ao invés de %c E para colocá -lo char variedade (char*). Você provavelmente também recebe um erro que precisa usar const char* e não const char.

Você não quer ler apenas um personagem - você quer ler uma string inteira ...

EDITAR:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
main(){  
  int digits,i;
  float imp=0;
  char* alpha = malloc(100); /* 100 is for example */
  do{
    printf("Enter input\n\n");
    scanf("\n%s",&alpha);
    for (i = 0; i != 100; ++i)
    {
      if (alpha[i] == '\0')
        break;
      if (!isdigit(alpha[i]))
      {
        printf("error\n\n");
        return ...;
      }
    }
     imp=atof(alpha);
  }while(true);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top