Torna indietro   Hardware Upgrade Forum > Software > Programmazione

AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D è la nuova CPU gaming di riferimento grazie alla 3D V-Cache di seconda generazione e frequenze fino a 5,6 GHz. Nei test offre prestazioni superiori a 9800X3D e 7800X3D, confermando la leadership AMD nel gaming su PC.
Le soluzioni FSP per il 2026: potenza e IA al centro
Le soluzioni FSP per il 2026: potenza e IA al centro
In occasione del Tech Tour 2025 della European Hardware Association abbiamo incontrato a Taiwan FSP, azienda impegnata nella produzione di alimentatori, chassis e soluzioni di raffreddamento tanto per clienti OEM come a proprio marchio. Potenze sempre più elevate negli alimentatori per far fronte alle necessità delle elaborazioni di intelligenza artificiale.
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS è il principale operatore di servizi cloud al mondo e da tempo parla delle misure che mette in atto per garantire una maggiore sovranità alle organizzazioni europee. L'azienda ha ora lanciato AWS European Sovereign Cloud, una soluzione specificamente progettata per essere separata e distinta dal cloud "normale" e offrire maggiori tutele e garanzie di sovranità
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 27-10-2007, 12:58   #1
gepeppe
Senior Member
 
L'Avatar di gepeppe
 
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 2599
[C] scanf chiede due volte il valore - sostituta

salve a tutti, devo usare scanf per inserire da tastiera il percorso di un file, solo che dopo la prima chiamata tutto ok, ma alla seconda, anche se cambio la variabile dove memorizzare il valore di scanf devo inserirla due volte. cioè la prima volta faccio:
Codice:
char primo[40];
char secondo[40];

scanf("%s", &primo);

altro codice....

scanf("%s", &secondo);
ma la seconda volta dopo che inserisco i lpercorso, si ferma e lo devo inserire di nuovo. perchè?? inoltre c'è una funzione sostitutiva di scanf per le stringh? perchè per i valori numerici singoli ho usato getch()

grazie
__________________
Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread
gepeppe è offline   Rispondi citando il messaggio o parte di esso
Old 27-10-2007, 14:44   #2
Alhazred
Senior Member
 
L'Avatar di Alhazred
 
Iscritto dal: Dec 2003
Messaggi: 1767
Probabilmente da fastidio la pressione di invio, prova a mettere un getchar(); dopo le scanf.
Alhazred è offline   Rispondi citando il messaggio o parte di esso
Old 27-10-2007, 14:45   #3
~=N30=~
Member
 
Iscritto dal: Jun 2003
Messaggi: 198
Quote:
Originariamente inviato da gepeppe Guarda i messaggi
salve a tutti, devo usare scanf per inserire da tastiera il percorso di un file, solo che dopo la prima chiamata tutto ok, ma alla seconda, anche se cambio la variabile dove memorizzare il valore di scanf devo inserirla due volte. cioè la prima volta faccio:
Codice:
char primo[40];
char secondo[40];

scanf("%s", &primo);

altro codice....

scanf("%s", &secondo);
ma la seconda volta dopo che inserisco i lpercorso, si ferma e lo devo inserire di nuovo. perchè?? inoltre c'è una funzione sostitutiva di scanf per le stringh? perchè per i valori numerici singoli ho usato getch()

grazie
quale percorso? fatti capire meglio, fai un esempio di input e cosa succede

(ps: puoi nn mettere la & se stai trattando array)



altre funzioni al posto di scanf ci sono, prova ad utilizzare la fgets()
__________________
finalmente adsl normale!
ho concluso felicemente con:
17mika, Moloch666, lucariello86, passionsmart,
~=N30=~ è offline   Rispondi citando il messaggio o parte di esso
Old 27-10-2007, 15:05   #4
gepeppe
Senior Member
 
L'Avatar di gepeppe
 
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 2599
Quote:
Originariamente inviato da Alhazred Guarda i messaggi
Probabilmente da fastidio la pressione di invio, prova a mettere un getchar(); dopo le scanf.
provato, non cambia nulla

Quote:
Originariamente inviato da ~=N30=~ Guarda i messaggi
quale percorso? fatti capire meglio, fai un esempio di input e cosa succede

(ps: puoi nn mettere la & se stai trattando array)

altre funzioni al posto di scanf ci sono, prova ad utilizzare la fgets()
nel senso che devo inserire in primo e secondo un percorso. Cioè a video esce inserisci il percorso del file, io scrivo c:\pippo.txt e viene memorizzato in primo..poi ci faccio alcune cose, tipo conto il numero di caratteri..poi esec a video, inserisci il file di output, io lo metto e con scanf dovrei averlo, solo che me lo chiede due volte...appunto

inoltre fgets() non ha bisogno di sapere qunti caratteri deve leggere? e se io non lo sapessi a priori?
__________________
Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread
gepeppe è offline   Rispondi citando il messaggio o parte di esso
Old 27-10-2007, 15:11   #5
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da gepeppe Guarda i messaggi
Codice:
char primo[40];
char secondo[40];

scanf("%s", &primo);

altro codice....

scanf("%s", &secondo);
due errori nel tuo codice:
1) devi togliere il & perché i vettori vengono passati per puntatore
2) sei a rischio di buffer overflow (l'input potrebbe superare i 40 caratteri); usa questo format string: "%40s"

per quanto riguarda la funzione sostitutiva ti suggerirei la gets se non fosse che è deprecata perché non c'è rimedio al rischio di buffer overflow.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 27-10-2007, 15:14   #6
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da 71104 Guarda i messaggi
2) sei a rischio di buffer overflow (l'input potrebbe superare i 40 caratteri); usa questo format string: "%40s"
oddio ora che ci penso temo che sia errato anche quel format string, a causa di un off-by-one; dalla documentazione del man non si capisce bene se il campo "field width" prima di una conversione nel caso delle stringhe include il carattere di terminazione... per sicurezza potresti usare quest'altro format string: "%39s"
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 27-10-2007, 15:19   #7
gepeppe
Senior Member
 
L'Avatar di gepeppe
 
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 2599
Quote:
Originariamente inviato da 71104 Guarda i messaggi
due errori nel tuo codice:
1) devi togliere il & perché i vettori vengono passati per puntatore
2) sei a rischio di buffer overflow (l'input potrebbe superare i 40 caratteri); usa questo format string: "%40s"

per quanto riguarda la funzione sostitutiva ti suggerirei la gets se non fosse che è deprecata perché non c'è rimedio al rischio di buffer overflow.
niente da fare...ho provato in tutti e due i modi, ma il problema non cambia!

devo usare allora una funzione che mi legge carattere per carattere fino a EOF con getc e metterne uno a uno nella stringa seconda!! uffa..stò scanf!!!!

ma se gli passo fgets(secondo, 100, stdin) e metto come n.caratteri 100 ma la parola e di 50 caratteri funziona lo stesso?

edit:
provato ma non funziona...fopen mi dice che non è corretto, cioè facendo cosi non trova il percorso!!
__________________
Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread

Ultima modifica di gepeppe : 27-10-2007 alle 15:24.
gepeppe è offline   Rispondi citando il messaggio o parte di esso
Old 27-10-2007, 15:19   #8
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da 71104 Guarda i messaggi
oddio ora che ci penso temo che sia errato anche quel format string, a causa di un off-by-one; dalla documentazione del man non si capisce bene se il campo "field width" prima di una conversione nel caso delle stringhe include il carattere di terminazione... per sicurezza potresti usare quest'altro format string: "%39s"
Microsoft conferma: il valore field width nel caso della conversione s non include il carattere NUL di terminazione.

e meno male che c'è Microsoft che vi aiuta a programmare meglio pure su Linux, alla faccia di tutti voi linuxisti anarchisti con quel maledetto pinguino storpio in avatar
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 27-10-2007, 15:25   #9
gepeppe
Senior Member
 
L'Avatar di gepeppe
 
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 2599
Quote:
Originariamente inviato da 71104 Guarda i messaggi
Microsoft conferma: il valore field width nel caso della conversione s non include il carattere NUL di terminazione.

e meno male che c'è Microsoft che vi aiuta a programmare meglio pure su Linux, alla faccia di tutti voi linuxisti anarchisti con quel maledetto pinguino storpio in avatar
__________________
Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread
gepeppe è offline   Rispondi citando il messaggio o parte di esso
Old 27-10-2007, 15:31   #10
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da gepeppe Guarda i messaggi
ah! anima candida, non sai nulla del dibattito Linux vs. Windows che scalda gli animi di mezzo mondo
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 27-10-2007, 15:32   #11
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7260
Quote:
Originariamente inviato da 71104 Guarda i messaggi
Microsoft conferma: il valore field width nel caso della conversione s non include il carattere NUL di terminazione.

e meno male che c'è Microsoft che vi aiuta a programmare meglio pure su Linux, alla faccia di tutti voi linuxisti anarchisti con quel maledetto pinguino storpio in avatar
fortuna che non è vero http://www.rt.com/man/scanf.3.html
Quote:
Matches a sequence of non-white-space characters;
the next pointer must be a pointer to char, and the
array must be large enough to accept all the
sequence and the terminating NUL character. The
input string stops at white space or at the maximum
field width, whichever occurs first.
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 27-10-2007, 15:37   #12
gepeppe
Senior Member
 
L'Avatar di gepeppe
 
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 2599
si ma alla fine io cosa faccio cò stà scanf?

__________________
Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread
gepeppe è offline   Rispondi citando il messaggio o parte di esso
Old 27-10-2007, 15:40   #13
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da k0nt3 Guarda i messaggi
fortuna che non è vero http://www.rt.com/man/scanf.3.html
è vero eccome; ho letto e riletto quella parte, e ancora non sono riuscito a capire se il valore numerico specificato nel format string includa il terminatore NUL o meno. mi spieghi cosa significa "The input string stops at the maximum field width" ??
molto più chiara MSDN invece, che fa un esempio di codice assolutamente inequivocabile:
Codice:
char s[10];

scanf("%9s", s, 10);
http://msdn2.microsoft.com/en-us/lib...et(VS.80).aspx



EDIT - avevo messo il link sbagliato; in realtà quella pagina non documenta proprio la scanf ma una funzione migliorata (più sicura) esclusiva del runtime di Visual C++, che vuole un ulteriore parametro che specifica la dimensione del buffer; infatti nel codice che ho scritto c'era un parametro di troppo, il 10 finale.

Ultima modifica di 71104 : 27-10-2007 alle 15:44.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 27-10-2007, 15:42   #14
~=N30=~
Member
 
Iscritto dal: Jun 2003
Messaggi: 198
quello della scanf e della lunghezza delle stringhe e' un problema senza soluzione (ho chiesto al prof di programmazione xke' ho avuto lo stesso problema)

puoi utilizzare una malloc e dei puntatori ma il problema resta

l'unica e' utilizzare una funzione diversa come quella che ti ho scritto prima
__________________
finalmente adsl normale!
ho concluso felicemente con:
17mika, Moloch666, lucariello86, passionsmart,
~=N30=~ è offline   Rispondi citando il messaggio o parte di esso
Old 27-10-2007, 15:45   #15
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7260
Quote:
the array must be large enough to accept all the sequence and the terminating NUL character
più chiaro di così si muore

strano che non funziona fgets.. prova a compilare un programma tipo questo:
Codice:
#include <stdio.h>

int main(char* argv[], int argc)
{
    char stringa[10];
    fgets(stringa, 10, stdin);
    printf("%s\n", stringa);
    return 0;
}
funziona?
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 27-10-2007, 15:49   #16
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da ~=N30=~ Guarda i messaggi
quello della scanf e della lunghezza delle stringhe e' un problema senza soluzione (ho chiesto al prof di programmazione xke' ho avuto lo stesso problema)
di' al tuo professore di ripassare: la scanf accetta nei format string un valore di "field width", che nel caso delle stringhe specifica la dimensione del buffer

Quote:
puoi utilizzare una malloc e dei puntatori ma il problema resta
infatti è un'osservazione non pertinente
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 27-10-2007, 15:50   #17
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da k0nt3 Guarda i messaggi
più chiaro di così si muore
il mio array infatti è largo abbastanza da accettare la sequenza di caratteri ed il terminatore nullo, ma mi spieghi come faccio a dire alla scanf la dimensione della sequenza di caratteri in questione? gliela devo passare con o senza il terminatore? 39 o 40?
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 27-10-2007, 15:57   #18
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7260
Quote:
Originariamente inviato da 71104 Guarda i messaggi
il mio array infatti è largo abbastanza da accettare la sequenza di caratteri ed il terminatore nullo, ma mi spieghi come faccio a dire alla scanf la dimensione della sequenza di caratteri in questione? gliela devo passare con o senza il terminatore? 39 o 40?
leggendo il man dice:
"Matches a sequence of non-white-space characters"
quindi è senza terminatore
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 27-10-2007, 16:00   #19
gepeppe
Senior Member
 
L'Avatar di gepeppe
 
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 2599
Quote:
Originariamente inviato da k0nt3 Guarda i messaggi
più chiaro di così si muore

strano che non funziona fgets.. prova a compilare un programma tipo questo:
Codice:
#include <stdio.h>

int main(char* argv[], int argc)
{
    char stringa[10];
    fgets(stringa, 10, stdin);
    printf("%s\n", stringa);
    return 0;
}
funziona?
mi stampa uello che gli passo in input..compresi gli spazi...tipo se gli scrivo solo ab, lui stampa ab + 8 spazi, ho fatto la prova mettendo in printf(%s X\n"); infatti e l'output è:
ab X

che palle stò winzoz!!! lo devo fare per forza qui...su linux non ho di questi problemi..uffa!!!!
__________________
Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread
gepeppe è offline   Rispondi citando il messaggio o parte di esso
Old 27-10-2007, 16:03   #20
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da k0nt3 Guarda i messaggi
leggendo il man dice:
"Matches a sequence of non-white-space characters"
quindi è senza terminatore
a parte il fatto che quella riga è completamente sbagliata visto che, sia su Windows che su Linux, la conversione %s della scanf legge anche i caratteri whitespace... comunque ancora non capisco se il numero che indica la dimensione del buffer che io scrivo tra il % e la lettera 's' deve includere o meno il conteggio del terminatore NUL.
71104 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequen...
Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
OpenAI lancia Prism: l'AI ora lavora fia...
Nissan mette i pannelli solari su Ariya:...
Day 3 a Barcellona: la prima di Norris c...
Usa: il capo della cyber sicurezza ha ca...
Nuovo look per il DJI Store di Milano: f...
I giudici sentenziano: Trump non pu&ogra...
Il kernel Linux si prepara al 'dopo Torv...
Meta, Snap, TikTok e YouTube: la prossim...
Daredevil Born Again seconda stagione: o...
IPTV illegali, Operazione 'Switch off': ...
Gli agenti di IA sono ovunque, e incontr...
Un'email inviata per errore svela che Am...
Samsung ha valutato il tasto fotocamera ...
L'Agenzia Spaziale Europea lancia un'IA ...
L'UE sfida Google sull'IA: integrazione ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 15:28.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v