Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Help
Forum - C/C++ - Help

Avatar
Nuko32 (Normal User)
Newbie


Messaggi: 1
Iscritto: 29/07/2011

Segnala al moderatore
Postato alle 15:18
Venerdì, 29/07/2011
Ciao raga ho appena iniziato a programmare in C e mi trovo abbastanza bene. Ultimamente sto lavorando e studiano sulle variabili int ma volevo creare un piccolo programma che a seconda della STRINGA immessa dall'utenete venga visualizzato un determinato messaggio :D
Esempio:
Se l'utente scrive "Ciao"
il programma risponde "Buongiorno"

con le integer si farebbe così

#include <stdio.h>

int messaggio;

scanf("%d" , &messaggio);

if(messaggio==4) {
   printf("Hai scritto 4\n");
}
/*FINE PROGRAMMA*/

Non so se ho reso l'idea, ovviamente le frasi da dire sono già prestabilite!
AIUTO X FAVORE!!! :heehee:

PM
Avatar
giulioscatto (Normal User)
Rookie


Messaggi: 37
Iscritto: 03/08/2009

Up
1
Down
V
Segnala al moderatore
Postato alle 15:25
Venerdì, 29/07/2011
Ciao!
Cerca informazioni sulla funzione strcmp (si trova nell'header <string.h>;)


X
PM
Avatar
comina8 (Normal User)
Pro


Messaggi: 86
Iscritto: 18/06/2011

Up
0
Down
V
Segnala al moderatore
Postato alle 17:23
Venerdì, 29/07/2011
In C, come ha detto giustamente Pitagora, le stringhe non esistono, ma sono rappresentate da array di caratteri.
Un array (anche se penso lo saprai) è una sequenza di celle di memoria dello stesso tipo:

Es. int a; corrisponde a "creare" una variabile chiamata a
     int a[10] corrisponde a "creare" 10 variabili intere ognuna riconoscibile
     dal nome della variabile (a) e il suo indice: a[0] è il primo elemento
     a[9] l'ultimo.

Quindi per "creare" una stringa bisogna dichiarare:
    char Stringa[100];

Per prendere in input una stringa si usa la scanf (come per i numeri)
passando come formato %s:

    scanf("%s",Stringa); //senza l'&!!

Per stampare una stringa printf("%s",Stringa);

Quindi un codice del genere:

Codice sorgente - presumibilmente C/C++

  1. char Stringa[100];
  2. printf("Inserisci la stringa: ");
  3. scanf("%s",Stringa);
  4. printf("La stringa che hai inserito: %s",Stringa);



Riceve in input una stringa e la stampa.

Per confrontare due stringhe si usa la funzione strcmp (string.h)

if(strcmp(Stringa1,Stringa2)==0) significa "se le due stringhe sono uguali"

Quindi un codice del genere:

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main()
  5. {
  6. char Str[100];
  7.  
  8. printf("Inserisci la stringa: ");
  9. scanf("%s",Str);
  10. if(strcmp(Str,"Ciao")==0)
  11.    printf("Buongiorno");
  12. else
  13.    printf("Comando sconosciuto");
  14. return 0;
  15. }



Stampa "Buongiorno" se la stringa ricevuta in input è uguale a "Ciao".

Da notare che strcmp (come tante altre funzioni) prende come parametro una stringa o "creata" da te o immessa direttamente mediante l'uso delle "".

Ultima modifica effettuata da comina8 il 29/07/2011 alle 17:25
PM
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Up
-2
Down
V
Segnala al moderatore
Postato alle 16:50
Venerdì, 29/07/2011
Testo quotato

ho appena iniziato a programmare in C e mi trovo abbastanza bene.


Questa illusione sparirà, credimi!

Le stringhe in C non esistono. Meglio, non c'è un tipo di dato specifico, come negli altri linguaggi!

Sei ancora lontano per poter usare le "stringhe" (notare virgolette) in C. Approfondisci i tuoi studi sulla iterazione, selezione, array, puntatore e poi le BRUTTE "stringhe" in C.

P.S. quel tuo, semplice, programma è solo l'inizio. Vai avanti, ma non correre troppo!

Guarda quanto è brutto il C
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main()
  6. {
  7.         char *stringa = calloc( 30, sizeof( char ) );
  8.         if ( stringa == NULL )
  9.         {
  10.                 fprintf( stderr, "Errore allocazione dinamica\n" );
  11.                 exit( 1 );
  12.         }
  13.        
  14.         fprintf( stdout, "> " );
  15.        
  16.         fscanf( stdin, "%s", stringa );
  17.        
  18.         if ( strcmp( stringa, "ciao" ) == 0 )
  19.                 fprintf( stdout, "Buongiorno :)\n" );
  20.         else
  21.                 fprintf( stdout, "Comando sconosciuto\n" );
  22.                
  23.         return 0;
  24. }


Ho reso l'idea? :rotfl:

STUDIA!
Non è mia intenzione scoraggiarti. Ricorda che solo il C, ti da la giusta base, per la programmazione. Perchè? Perchè è compito del programmatore gestire, TUTTO ( a volte porta effetti negativi )! In altri linguaggi non è così. Presto lo capirai... Ogni programmatore deve conoscere il C!

Ultima modifica effettuata da Pitagora il 29/07/2011 alle 17:39
Penso sia inutile sbattergli i puntatori in faccia senza neanche una spiegazione dicendogli solamente che il C è "brutto" e che deve studiare...-.-" - comina8 - 29/07/11 17:28
Penso sia inutile rispondere a questo topic dandogli dei chiarimenti riguardo ad array, quando ancora deve studiare funzioni, cicli interattivi. Attenzione Attenzione, ho scritto che è brutto, ma ho scritto A FINE POST che è un linguaggio indispensabile. Il che è un valido motivo per poter - Pitagora - 29/07/11 17:35
... proseguire lo studio. Inoltre nel mio post ci sono dei flash che toccano l'argomento: "bruttezza". Vedi: "Non c'è un tipo di dato che permetta di usare le stringhe", "compito del programmatore gestire tutto" - Pitagora - 29/07/11 17:39
E' meglio che sia il programmatore a gestire tutto...E poi anche avessi un tipo di dato String cambierebbe così tanto per l'esercizio da lui proposto? - comina8 - 29/07/11 20:20
L'allocazione dinamica non è necessaria in questo esercizio... complicazioni extra. Inoltre non trovo che il C sia definibile "brutto". - pierotofy - 30/07/11 01:53
oh ma dai ragazzi, il C è così limitato... Non può essere paragonato a MOLTI ALTRI linguaggi. - Pitagora - 30/07/11 11:27
@comina8 io non ho detto ciò che hai scritto tu, nella prima frase. Ho semplicemente affermato che, "la gestione tocca al programmatore... ( A VOLTE porta effetti negativi) " - Pitagora - 30/07/11 11:31
Il C è limitato per chi è limitato...E comunque tu hai detto che non c'è un tipo di dato per le stringhe e io ti ho chiesto, che cosa cambierebbe? (è una domanda non un'affermazione-domanda) - comina8 - 30/07/11 12:15
non incominciamo a scrivere frasi con doppi sensi che contengono insulti, stiamo SEMPLICEMENTE, esprimendo la nostra opinione. Un esempio, semplifica le cose: e meglio avere un televisore 21" o un televisore 50" full HD, 3D. quale pensi che sia meglio? - Pitagora - 30/07/11 15:48
Non c'era nessun doppio senso, era tutto molto esplicito, il C non va bene per chi non lo sa gestire. Se a te non piace non vuol dire che non lo sai gestire. In ogni caso non hai risposto alla mia domanda. - comina8 - 30/07/11 16:00
non parlo con le persone arroganti. Chiudo qui. - Pitagora - 30/07/11 17:41
Hai esaurito gli specchi? Chiudo anch'io. - comina8 - 30/07/11 18:02
Interessante discussione ... non ho capito solo una cosa ... cosa sono i "cicli interattivi" Pitagora? - nessuno - 01/08/11 08:27
(cicli iterativi)* - Pitagora - 01/08/11 10:14
Ok anche se parlare di "ciclo iterativo" non ha molto senso ... semmai si parla di "algoritmo iterativo" che si implementa tramite cicli (o loop) - nessuno - 01/08/11 10:49


Yep, I came back :P
PM