Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
WF-1000X M6 è la sesta generazione di auricolare in-ear sviluppata da Sony, un prodotto che punta a coniugare facilità di utilizzo con una elevata qualità di riproduzione dei contenuti audio e una cura nella riduzione del rumore ambientale che sia da riferimento
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake ha presentato diverse novità per la sua piattaforma legate all'intelligenza artificiale. Quella forse più eclatante è una collaborazione con OpenAI, ma non mancano diverse nuove funzionalità che rendono la piattaforma più flessibile e in grado di rispondere meglio alle esigenze in continuo cambiamento delle aziende
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-05-2009, 16:04   #1
tookie
Member
 
L'Avatar di tookie
 
Iscritto dal: Apr 2009
Messaggi: 50
[C]chiarimenti su costrutto switch

ciao a tutti,

volevo sapere se qualcuno può indicarmi un modo per usare il costrutto switch-case, con stringhe o char

Codice:
#include <stdio.h>

int main(int argc,char** argv[]){

switch ( argv[1]) {
case 'r':

    printf("reverse!\n");
   break;
case 'l':

    printf("limited!\n");
   break;
default:

    printf("normal!\n");
   break;
} 


}
in questo semplice programma ho provato a farlo andare passandogli da riga di comando argv[1](il main devo lasciarlo cosi perchè devo unire questo segmento di codice ad un altro programma che necessita di quei parametri), e da quel che so argv è un array di argomenti lungo argc, letti come char, perciò dato che switch dovrebbe funzionare con quasi tutti i tipi numerici e char non capisco perchè mi ritorni

Codice HTML:
prgramma_semplice.c:5: error: switch quantity not an integer
ho cercato un pò in rete ma nessuna soluzione ha funzionato, e in alcuni casi queste hanno creato maggiori guai...ho provato anche ad assegnare ad una variabile char x il valore di argv[1] ma niente
tookie è offline   Rispondi citando il messaggio o parte di esso
Old 08-05-2009, 16:53   #2
british
Member
 
L'Avatar di british
 
Iscritto dal: Sep 2008
Città: Milano
Messaggi: 126
intanto i parametri del main che hai postato sono scorretti:
argc va bene di tipo int
argv invece è un array di stringhe, che puoi vedere:
o come un array di array di caratteri e in tal caso lo indichi come *argv[]
o come un puntatore a un puntatore a carattere e in tal caso lo indichi come **argv
le due versioni sono sostanzialmente equivalenti proprio per l'equivalenza, in C, tra puntatori e array
premesso ciò, argv[1] non è un char, bensì è il secondo elemento di argv e per quanto detto sopra è un array di caratteri.

tornando a bomba:

se vuoi effettuare lo switch su argv[1] e ( argv[1] è lungo un solo carattere oppure vuoi prenderne solo il primo carattere ) allora puoi fare:

switch ( argv[1][0] )

( prendendo esplicitamente il primo elemento di argv[1] )
oppure

switch ( *argv[1] )

( dereferenziando il puntatore )

così accedi al primo carattere della seconda stringa contenuta in argv.

se invece vuoi switchare su delle stringhe di lunghezza arbitraria... beh non puoi, in quanto lo puoi fare solo su valori interi ( o promuovibili a intero, come un char )

l'alternativa è andare di if - strcmp - else, oppure usare qualche tipo di hash

spero di non essere stato troppo incomprensibile

ciao!

british

P.S.

prima di accedere a qualsiasi titolo a elementi di argv ricordati di controllare che esistano attraverso argc, altrimenti il crash del programma è garantito
british è offline   Rispondi citando il messaggio o parte di esso
Old 08-05-2009, 17:32   #3
tookie
Member
 
L'Avatar di tookie
 
Iscritto dal: Apr 2009
Messaggi: 50
grazie ma questa era una soluzione che mi aveva generato un ulteriore problema, infatti adesso con questa sintassi

Codice:
.....
int main(int argc,char *argv[]){

switch (*argv[1]) {
case 'r':

    printf("reverse!\n");
   break;
.....

mi genera un segmentation fault, che dovrei riuscire a risolvere utilizzando il comando malloc, ma questo è utilizzabile su argv?
o è meglio che crei un altro array su cui salvo tutti gli argomenti passati sulla riga di comando e applico malloc e switch sull'array appena creato?
oppure se hai qualche altra soluzione migliore son tutto orecchie
tookie è offline   Rispondi citando il messaggio o parte di esso
Old 08-05-2009, 17:59   #4
british
Member
 
L'Avatar di british
 
Iscritto dal: Sep 2008
Città: Milano
Messaggi: 126
a me funziona... sei sicuro che argv[1] esista? ( ovverosia che argc > 1 ovverosia che effettivamente gli passi l'argomento sulla linea di comando )

ciao!

british
british è offline   Rispondi citando il messaggio o parte di esso
Old 08-05-2009, 18:17   #5
tookie
Member
 
L'Avatar di tookie
 
Iscritto dal: Apr 2009
Messaggi: 50
ah si scusa son proprio fuso oggi, mi ero dimenticato di passargli l'argomento

Grazie mille per avermi aiutato
tookie è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Roscosmos ha lanciato il satellite meteo...
Starship Troopers: Ultimate Bug Wars, to...
Il razzo spaziale europeo Ariane 6, per ...
Oracle Fusion Cloud Applications si pote...
OHB Italia svilupperà un satellit...
Fortinet: "Ora abbiamo una chance d...
Linux Mint chiude con gli aggiornamenti ...
Compressori portatili auto in sconto su ...
Durante il lancio della missione USSF-87...
Dopo il ritiro di Intel da Magdeburgo, l...
Xiaomi 15T scende a 388€ su Amazon: 12GB...
MSI Afterburner: arriva il monitoraggio ...
Missione cinese Chang'e-6: confermata l'...
Addio esenzione sotto i 150 euro: l'UE i...
Allarme riavvii su Windows 11 dopo il ri...
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: 05:08.


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