PDA

Visualizza la versione completa : [C] pulizia campi senza libreria conio.h


mar("9546")
27-03-2013, 16:48
Salve vorrei che ne mio programma venga eliminata la ripetizione del testo ogni vota che vi un errore di inserimento ...magari pulendo solo il campo o facendo uscire per pochi secondi la scritta errore e poi permettere l'inserimento del valore richiesto senza ripetere il testo"inserisci coef angolare " e " inserisci la variabile q".premetto che ho un problema con il compilatore e non accetta la la libreria conio.h come potdei fare?

#include<stdio.h>
#include <stdlib.h>
#define SIZE 4
int isnumeric(char *);

int main(int argc, const char *argv[])
{
float array[SIZE];
int x;
char temp[20];
float q;
float m;
printf("inserisci coef. angolare\n");
while (!isnumeric(gets(temp)))
printf("inserisci coef. angolare\n");
m = (float)atof(temp);
printf("inserisci q\n");
while (!isnumeric(gets(temp)))
printf("inserisci q\n");
q = (float)atof(temp);
printf("%s%13s\n", "Elemento", "Valore");
for (x = 0; x <= SIZE - 1; x++)
{
array[x] = m * x + q;
}
for (x = 0; x <= SIZE - 1; x++)
{
printf("%8d%13.2f\n", x, array[x]);
}


system("pause");
}


int isnumeric(char *str)
{
if (str == NULL)
return 0; // Continua se la stringa e NULL
while (*str)
{
if (*str != '.' && (*str < '0' || *str > '9'))
return 0;
str++;
}


return 1;
}

torn24
27-03-2013, 18:04
Ciao , bisogna anche accontentarsi :D
Un programma console , gestisce l' output e input in un modo ben preciso , quindi non si pu ottenere tutto ci che si vuole , se vedi programmi in c che fanno di tutto probabilmente non ANSI C "standard" ma usano funzioni e librerie particolari .


DA quel che ho capito , vorresti evitare che ti compaiano sullo schermo infinite scritte

se l'input sbagliato , esempio

inserisci valore uno ->f
inserisci valore uno ->f
inserisci valore uno ->f

potresti risolvere ripulendo lo schermo , ad ogni "errore di input " visto che usi sistemi linux
dovrebbe essere system("clear")

quindi prova a modificare i vari while come segue





while (!isnumeric(gets(temp))){

system("clear");
printf("inserisci coef. angolare\n");
}

Alex'87
27-03-2013, 18:45
Fatti una funzione "clear" che esegue 80 volte printf("\n");

mar(&quot;9546&quot;)
27-03-2013, 19:56
Grazie torn24 ma con il clear system viene cancellato tutto anche il printf e non si pu inserire piu niente poi se si preme enter per farla ripartire prende gli invio come zeri e termina la funzione lo stesso con tutti zero come risultato

Marco1995
27-03-2013, 21:18
printf("inserisci coef. angolare\n");
while (!isnumeric(gets(temp)));


In questo modo anche se sbagli l'inserimento,te lo fa inserire ma non te lo richiede..Spero sia ci che intendevi :D

Alex'87
27-03-2013, 22:07
Originariamente inviato da mar("9546")
Grazie torn24 ma con il clear system viene cancellato tutto anche il printf e non si pu inserire piu niente poi se si preme enter per farla ripartire prende gli invio come zeri e termina la funzione lo stesso con tutti zero come risultato Ah ok, pensavo ti bastasse ripulire lo schermo ^^

MItaly
27-03-2013, 23:00
Su che piattaforma stai lavorando?

mar(&quot;9546&quot;)
28-03-2013, 00:33
Uso android come sistema operativo e c4droid come compilatore

mar(&quot;9546&quot;)
28-03-2013, 00:34
Non devo pulire lo schermo ma solo il campo di inserimento dell'input

mar(&quot;9546&quot;)
28-03-2013, 00:58
Grazie a torn24legge il carattere in entrata e non ripete il il testo ma ora non funziona nell'esecuzione del calcolo.
#include<stdio.h>
#include <stdlib.h>
#define SIZE 4
int isnumeric(char *);

int main(int argc, const char *argv[])
{
float array[SIZE];
int x;
char temp[20];
float q;
float m;
printf("inserisci coef. angolare\n");
while (!isnumeric(gets(temp))){
system("clear");
printf("inserisci coef. angolare\n");}

printf("inserisci q\n");
while (!isnumeric(gets(temp))){
system("clear");
printf("inserisci q\n");}

printf("%s%13s\n", "Elemento", "Valore");
for (x = 0; x <= SIZE - 1; x++)
{
array[x] = m * x + q;
}
for (x = 0; x <= SIZE - 1; x++)
{
printf("%8d%13.2f\n", x, array[x]);
}


system("pause");
}


int isnumeric(char *str)
{
if (str == NULL)
return 0; // Continua se la stringa e NULL
while (*str)
{
if (*str != '.' && (*str < '0' || *str > '9'))
return 0;
str++;
}


return 1;
}

Loading