Scansione, Controllo, Converting, Copia di valori ... Come? - C -
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);
}
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);
}