Domanda

È stato un po 'di tempo e im ancora cercando di ottenere un certo codice di lavoro. Ho chiesto a qualche domanda su diversi comandi ecc prima, ma ora spero che questo è quello finale (che combina tutte le domande in un codice).

Io fondamentalmente voglio:

* Scan un ingresso (dovrebbe essere personaggio?)

* Controllare se un numero

* In caso contrario, l'errore di ritorno

* Conversione quel personaggio in un numero float

* Copia il valore di un'altra variabile (ho chiamato imp qui)

Ecco quello che mi si avvicinò con:

A CURA CODICE *

#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);

}

Il problema è questo codice non funziona a tutti ... Mi dà che atof deve essere di un const char e ogni volta che prova a cambiare in giro, semplicemente continua a fallire. Sono frustrato e costretto a chiedere qui, perché credo di aver provato un sacco e io continuo in mancanza, ma non sarò sollevato fino a quando ho capito di lavorare xD Così ho davvero bisogno del vostro aiuto ragazzi.

La prego di dirmi il motivo per cui è neanche questo codice di lavoro, quello che sto facendo di sbagliato? Sto ancora imparando C e apprezzo molto il vostro aiuto:)

Modifica Errore data atm è:

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

Modifica Questo codice compila bene, ma si blocca quando viene immesso un input.

  #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);
 }
È stato utile?

Soluzione

Perché non hanno scanf fare la conversione atof per voi?

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

Il più recente esempio sta venendo a mancare a causa alpha è un puntatore NULL. Dichiareremo come char alpha[40]; per allocare spazio per essa. Probabilmente si vorrà usare% 40 nella stringa di formato per evitare scanf da traboccante alpha.

Inoltre, l'uso strtod invece di atof e saprete se la conversione ha avuto successo (migliore del tuo metodo di usare isdigit che fallire su un intero negativo).

Altri suggerimenti

Probabilmente bisogno di usare %s invece di %c e per metterla in ordine char (char*). È anche probabilmente ottenere un errore che è necessario utilizzare const char* e non const char.

Non si vuole leggere un solo carattere - si desidera leggere un'intera stringa di ...

Modifica :

#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);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top