PDA

Visualizza la versione completa : [C] Scanf inizializzato


Stratus
04-10-2004, 11:49
Sto cercando di fare una cosa in C che concettualmente è semplicissima ma non sono riuscito a farla.

Vorrei creare uno scanf inizializzata. In altre parole vorrei inserire dei valori nel buffer di input prima di invocare lo scanf.

Ovviamente quello che deve contenere lo scanf deve essere modificabile. :zizi:

Aiutatemi non so più dove sbattere la testa :dhò:

Grazie mille per eventuali aiuti...

xegallo
04-10-2004, 11:52
linguaggio anche nel titolo

Johnny_Depp
04-10-2004, 12:08
non ho capito bene, posta un esempio (un pò di codice)

Stratus
04-10-2004, 12:13
Vorrei fare una cosa simile:


char *new_scanf(void){
char c[5]="testo";
char d[5];
fprintf(stdin,"%s",c);
scanf("%5s",&d);
return(d);
}


Cioè quando vado ad invocare scanf vorrei che già assumesse il valore "testo".

Come un textbox inizializzato.

Johnny_Depp
04-10-2004, 12:52
mah, forse sono io a non capire, ho comunque
raggirato il problema nel seguente modo:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
char str[] = "testo"; /* 't','e','s','t','o','\0' == 6 (non 5) */
char var[6] = "\0";
char c = '\0', i = 0;

printf("Inserisci una stringa: ");

while( (c = getchar()) != '\n' ) // prova a premere [invio] senza inserire nulla
{
var[i] = c;
i++;
}

if(var[0] == '\0') strcpy(var, str);

printf("VAR: %s\n", var);
system("pause");
return 0;
}

Stratus
04-10-2004, 13:40
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
char str[] = "testo"; /* 't','e','s','t','o','\0' == 6 (non 5) */
char var[6] = "\0";
char c = '\0', i = 0;

printf("Inserisci una stringa: ");

while( (c = getchar()) != '\n' ) // prova a premere [invio] senza inserire nulla
{
var[i] = c;
i++;
}

if(var[0] == '\0') strcpy(var, str);

printf("VAR: %s\n", var);
system("pause");
return 0;
}


Questo è una soluzione semplice.

Vorrei inserire direttamente nello scanf un valore di default:

Esempio:

Inserisci una stringa: testo
si deve poter modificare la scritta "testo"






Credevo che era una cosa semplice da fare.

Ora non ne sono più convinto. :oVVoVe: :confused:

Johnny_Depp
04-10-2004, 13:54
non credo che alla funzione scanf() sia possibile passare un
valore di default... puoi comunque crearti una scanf() rivista, tipo questa:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void *initScanf(char *s, char *d)
{
char c = '\0', i = 0;

while( (c = getchar()) != '\n' ) // prova a premere [invio] senza inserire nulla
{
s[i] = c;
i++;
}

if(s[0] == '\0') strcpy(s, d);
}

int main()
{
char var[6] = "\0";

printf("Inserisci una stringa: ");

initScanf(var, "DEFAULT"); // se non inserisci nulla restituisce la stringa "DEFAULT"

printf("VAR: %s\n", var);

system("pause");
return 0;
}

Stratus
04-10-2004, 16:55
Può darsi che sono poco chiaro nello spiegarmi.

Io Vorrei realizzare una sorta di textbox e assegnarli un valore iniziale. L'utente può scegliere se confermare quel valore (premendo il tasto invio) altrimenti può cancellarlo (in parte o totalmente) e inserirlo uno nuovo.

Capito ora qual'è il mio problema? :oVVoVe: :maLOL: :unz: :biifu:

/dev/null
04-10-2004, 17:03
Originariamente inviato da Stratus
Può darsi che sono poco chiaro nello spiegarmi.

Io Vorrei realizzare una sorta di textbox e assegnarli un valore iniziale. L'utente può scegliere se confermare quel valore (premendo il tasto invio) altrimenti può cancellarlo (in parte o totalmente) e inserirlo uno nuovo.

Capito ora qual'è il mio problema? :oVVoVe: :maLOL: :unz: :biifu: Tramite le librerie standard del C non c'e' modo di farlo... Che sappia io :zizi:
Devi farlo usando altre librerie...
Ad esempio cerca info sulle NCurses...

:ciauz:

Stratus
04-10-2004, 18:34
Tramite le librerie standard del C non c'e' modo di farlo... Che sappia io :zizi:
Devi farlo usando altre librerie...
Ad esempio cerca info sulle NCurses...

:ciauz:


Ma le NCurses non funzionano solo sotto linux?

Loading