Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Con la prima rete 5G Standalone attiva in Italia, WINDTRE compie un passo decisivo verso un modello di connettività intelligente che abilita scenari avanzati per imprese e pubbliche amministrazioni, trasformando la rete da infrastruttura a piattaforma per servizi a valore aggiunto
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro punta a diventare uno dei riferimenti assoluti nel segmento dei camera phone di fascia alta. Con un teleobiettivo Hasselblad da 200 MP, una batteria al silicio-carbonio da 7500 mAh e un display da 6,78 pollici con cornici ultra ridotte, il nuovo flagship non teme confronti con la concorrenza, e non solo nel comparto fotografico mobile. La dotazione tecnica include il processore MediaTek Dimensity 9500, certificazione IP69 e un sistema di ricarica rapida a 80W
DJI Romo, il robot aspirapolvere tutto trasparente
DJI Romo, il robot aspirapolvere tutto trasparente
Anche DJI entra nel panorama delle aziende che propongono una soluzione per la pulizia di casa, facendo leva sulla propria esperienza legata alla mappatura degli ambienti e all'evitamento di ostacoli maturata nel mondo dei droni. Romo è un robot preciso ed efficace, dal design decisamente originale e unico ma che richiede per questo un costo d'acquisto molto elevato
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


Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi Wind Tre 'accende' il 5G Standalone in Italia: s...
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh OPPO Find X9 Pro: il camera phone con teleobiett...
DJI Romo, il robot aspirapolvere tutto trasparente DJI Romo, il robot aspirapolvere tutto trasparen...
DJI Osmo Nano: la piccola fotocamera alla prova sul campo DJI Osmo Nano: la piccola fotocamera alla prova ...
FUJIFILM X-T30 III, la nuova mirrorless compatta FUJIFILM X-T30 III, la nuova mirrorless compatta
Bitcoin compie 17 anni: il Whitepaper ch...
Attenzione agli HDD Western Digital Blue...
MacBook Air M4 a un super prezzo su Amaz...
Dal 12 novembre stretta sui siti porno: ...
Recensione Synology DS725+: tornano i di...
Car of the Year 2026, rivelate le 7 fina...
Il mouse diventa indossabile: Prolo Ring...
Animal Crossing: New Horizons torna in v...
Task Manager impazzito su Windows 11: in...
NZXT: il PC in abbonamento finisce in tr...
Halo 2 e 3: remake in arrivo, multiplaye...
Robot Phone e un nuovo ecosistema AI: HO...
Amazon sorprende tutti: extra 15% di sco...
HONOR 400 Lite 5G a 209,90€: smartphone ...
Asus TUF Gaming F15 con RTX 4070 e i7-12...
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: 16:12.


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