Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni
Redmi Pad 2 9.7 punta su un display ampio e fluido, una batteria capace di accompagnare l'uso quotidiano senza ansie da ricarica e un prezzo accessibile, a partire da 179,90 euro per la versione con 64 GB di storage. Lo Snapdragon 6s 4G Gen 2 e i 4 GB di RAM della configurazione più diffusa frenano però chi cerca reattività e multitasking spinto: ecco il bilancio dopo due settimane di prova diretta
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Polygon è la concept car di Peugeot che mostra il futuro delle soluzioni del segmento B: tra design compatti e innovativi affiancati da dimensioni compatte uno scherzo dalla manovrabilità incredibile per le manovre a bassa velocità
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione
OPPO ha portato in Italia, dal 1° luglio 2026, Reno16 Pro: display AMOLED da 6,32 pollici a 144Hz, tripla fotocamera con sensore principale da 200 megapixel, chip Dimensity 8550 Super e batteria da 6000mAh, al prezzo di lancio di 899 euro. Lo abbiamo provato per due settimane insieme al nuovo accessorio Bubble, per capire se la formula compatta della serie regge ancora di fronte a un listino da 1099 euro
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-05-2009, 15: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, 15: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, 16: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, 16: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, 17: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


Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni Redmi Pad 2 9.7: ampio display, economico e peso...
Peugeot Polygon Concept: ecco il futuro delle utilitarie Peugeot Polygon Concept: ecco il futuro delle ut...
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione Reno16 Pro: il compatto di OPPO punta su fotocam...
 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco Hisense 55U7SE: tuttofare e accessibile, il Min...
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto Kindle Scribe Colorsoft: riduce le cornici e div...
Assassin's Creed Black Flag Resynced mos...
HillMiles MileCity1 in offerta su Amazon...
3 portatili in offerta da non perdere: A...
Fusione nucleare, Proxima Fusion raccogl...
xAI cambia ufficialmente nome in SpaceXA...
Le 10 offerte TOP Amazon: ci sono divers...
Un data center di Meta ha portato un bat...
Il chip cinese 478 volte più velo...
Reddit usa l'AI per fermare l'AI: blocca...
Il presunto guasto hardware della Steam ...
LG QNED80, OLED C5 e OLED evo C6: 3 Smar...
Google cambia le regole del backup Andro...
Utili da capogiro per Samsung, ma il mer...
Nintendo Switch, addio alle vendite in E...
Open Printer, la stampante che dice addi...
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: 11:12.


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