Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Funzione per la stampa di una parola in C

Linguaggi e sistemi

Moderatori: Foto UtentePaolino, Foto Utentefairyvilje

0
voti

[11] Re: Funzione per la stampa di una parola in C

Messaggioda Foto Utentehuyol » 17 set 2016, 12:32

Codice: Seleziona tutto
franco@HP-15-Notebook-PC:~/Scrivania$ gcc -o stampaParola STAMPAPAROLA.c
franco@HP-15-Notebook-PC:~/Scrivania$ stampaParola
stampaParola: comando non trovato
franco@HP-15-Notebook-PC:~/Scrivania$


una curiosità...quindi il programma dovrebbe funzionare anche senza dichiarare un array?
Avatar utente
Foto Utentehuyol
120 2 5
Frequentatore
Frequentatore
 
Messaggi: 203
Iscritto il: 30 gen 2011, 19:24

0
voti

[12] Re: Funzione per la stampa di una parola in C

Messaggioda Foto UtenteMassimoB » 17 set 2016, 12:40

Uso sempre l' IDE per compilare non vorrei avere invertito (anche se in teoria con il tuo primo comando avrebbe dovuto funzionare

Provalo così o vedi se il file .C è nella cartella selezionata

Codice: Seleziona tutto
gcc -o  STAMPAPAROLA.c stampaParola
MCSA Windows Server 2012 R2
Cisco CCNA R&S - Cisco CCNA Security - Cisco CCNA Cyber Ops
CompTia A+ - CompTia Linux+ - CompTIA Systems Support Specialist CSSS
CompTia Pentest+ LPIC-1 - VCP VMware - Cisco CCNP Enterprise
Avatar utente
Foto UtenteMassimoB
14,2k 6 12 13
Expert free
 
Messaggi: 3163
Iscritto il: 28 ott 2012, 9:56
Località: Milano

3
voti

[13] Re: Funzione per la stampa di una parola in C

Messaggioda Foto Utentebanjoman » 17 set 2016, 12:41

Parola e' dichiarato come singolo char.
Passandolo come argomento alla scanf cosi':
Codice: Seleziona tutto
scanf ("%s", &parola);

scanf termina di leggere quando l'utente preme INVIO e copia la stringa nella zonadi memoria puntata da &char.
Dato che parola e' dichiarato come singolo carattere, il programma puo' funzionare ma puo' anche crashare di brutto se viene sovrascritta una zona di memoria riservata.

Si puo' correggere in due modi:
1) Dichiarando un array di caratteri sufficientemente grande, ad esempio:
Codice: Seleziona tutto
char parola[100];

e poi chiamando la scanf semplicemente cosi':
Codice: Seleziona tutto
scanf ("%s", parola);

(per definizione il nome di un array e' anche il puntatore al primo elemento. Sarebbe come scrivere:
Codice: Seleziona tutto
scanf ("%s", &parola[0]);


In alternativa a usare array statici, si possono usare le fuznioni di gestione della memoria alloc/malloc, ma per i primi esperimenti meglio stare sul semplice.

Per compilare usa:

Codice: Seleziona tutto
gcc stampaparola.c -o stampaparola


Attenzione che linux distingue tra caratteri minuscoli e maiuscoli.

Dopo aver compilato il programma, in linux si lancia fancdolo predere da ./ cosi':
Codice: Seleziona tutto
franco@HP-15-Notebook-PC:~/Scrivania$ ./stampaparola


O_/
Se funziona quasi bene, è tutto sbagliato. A.Savatteri/M.Mazza
Avatar utente
Foto Utentebanjoman
12,2k 5 11 12
G.Master EY
G.Master EY
 
Messaggi: 1625
Iscritto il: 19 set 2013, 19:27

0
voti

[14] Re: Funzione per la stampa di una parola in C

Messaggioda Foto Utentehuyol » 17 set 2016, 12:48

Codice: Seleziona tutto
franco@HP-15-Notebook-PC:~/Scrivania$ ./stampaParola
quale parola vuoi digitare?franco
la parola da te scelta è franco
franco@HP-15-Notebook-PC:~/Scrivania$


Codice: Seleziona tutto
/* PROGRAMMA PER LA STAMPA DI UNA PAROLA */

#include<stdio.h>

int main ()
{
char parola;
printf ("quale parola vuoi digitare?");
scanf ("%s", &parola);
printf ("la parola da te scelta è %s\n", &parola);
return 0;
}


FUNZIONA!!!! grazie a tutti...ognuno di voi mi ha dato un'indicazione....ora, ha funzionato senza array ma è a rischio di crash, per cui ora proverò con la dichiarazione dell'array..
Avatar utente
Foto Utentehuyol
120 2 5
Frequentatore
Frequentatore
 
Messaggi: 203
Iscritto il: 30 gen 2011, 19:24

0
voti

[15] Re: Funzione per la stampa di una parola in C

Messaggioda Foto Utentebanjoman » 17 set 2016, 12:51

Direi che e' proprio il caso :-) Una stringa in C e' niente altro che un array di char. In questo momento stai forzando il programma a usare un array di UN elemento, vedi un po' tu... :mrgreen:
Se funziona quasi bene, è tutto sbagliato. A.Savatteri/M.Mazza
Avatar utente
Foto Utentebanjoman
12,2k 5 11 12
G.Master EY
G.Master EY
 
Messaggi: 1625
Iscritto il: 19 set 2013, 19:27

0
voti

[16] Re: Funzione per la stampa di una parola in C

Messaggioda Foto UtenteTardoFreak » 17 set 2016, 12:56

Piccola parentesi.
Questo è uno dei motivi per cui ho suggerito Java per iniziare a programmare.
In pratica il sorgente è identico con la differenza che la stringa non è dichiarata come array di caratteri ma con il tipo String.
Di per se non vi è una grande differenza se non per il fatto che, a livello didattico, le array si studiano più avanti ed in altro modo.
Lo stesso programma scritto in Java è questo
Codice: Seleziona tutto
package didattica;
import java.util.*;
public class Didattica {

  public static void main(String[] args) {
    Scanner tastiera = new Scanner(System.in);
    String s = tastiera.nextLine();
    System.out.println("La linea letta dalla tastiera è: " + s);
  }
 
}
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[17] Re: Funzione per la stampa di una parola in C

Messaggioda Foto Utentehuyol » 17 set 2016, 12:59

Codice: Seleziona tutto
franco@HP-15-Notebook-PC:~/Scrivania$ gcc STAMPAPAROLA.c -o stampaParola
franco@HP-15-Notebook-PC:~/Scrivania$ ./stampaParola
quale parola vuoi digitare?nel mezzo del cammino di nostra vita
la parola da te scelta è nel
franco@HP-15-Notebook-PC:~/Scrivania$


Codice: Seleziona tutto
/* PROGRAMMA PER LA STAMPA DI UNA PAROLA */

#include<stdio.h>

int main ()
{
char parola[100];
printf ("quale parola vuoi digitare?");
scanf ("%s", parola);
printf ("la parola da te scelta è %s\n", parola);
return 0;
}

pur avendo dichiarato un array di 100 elementi (99 caratteri+ lo zero se ho capito bene...) nell'output mi ha stampato solo i primi tre elementi....cioè non riconosce il carattere spazio....perché.......boh!
Avatar utente
Foto Utentehuyol
120 2 5
Frequentatore
Frequentatore
 
Messaggi: 203
Iscritto il: 30 gen 2011, 19:24

0
voti

[18] Re: Funzione per la stampa di una parola in C

Messaggioda Foto Utentebanjoman » 17 set 2016, 13:11

Gli spazi bianchi sono considerati separatori di stringhe.
Se vuoi copiare interamente "nel mezzo del cammino di nostra vita" allora dovresti dire alla scanf() quanti "campi" stringa prevedi di leggere. Ad esempio, essendovi nel tuo caso 7 parole separate, dovresti scrivere:
Codice: Seleziona tutto
printf ("la parola da te scelta è %s%s%s%s%s%s%s\n", parola);

A questo punto ti conviene usare la funzione gets(), che legge tutto cio' che viene digitato da tastiera (spazi inclusi) fino a quando l'utente non preme INVIO.
Codice: Seleziona tutto
gets(parola);

La scanf() non e' conveniente per l'input di frasi di testo. Essa serve invece quando l'utente deve inserire uno o piu' campi (separati da virgole o spazi) di vario tipo: ad esempio una stringa seguita da un intero, un float e cosi' via.
Leggiti la documentazione su scanf(), printf() e gets()/puts().
O_/
Se funziona quasi bene, è tutto sbagliato. A.Savatteri/M.Mazza
Avatar utente
Foto Utentebanjoman
12,2k 5 11 12
G.Master EY
G.Master EY
 
Messaggi: 1625
Iscritto il: 19 set 2013, 19:27

Precedente

Torna a PC e informatica

Chi c’è in linea

Visitano il forum: Nessuno e 30 ospiti