notifico un errore al minuto 10:49 -Un valore maggiore di 0 se str1 > str2; -Un valore minore di 0 se str1 < str2; dovrebbe essere così invece nel video sono stati messi i segni minore e maggiore opposti.
Non sto capendo una cosa, se il Black Smash 0 non permette al compilatore di stampare quello che c'è dopo nel vettore, perché la poniamo la Stringa nel ciclo diversa da '\0'? È un contro senso non dev'essere str[i] == '\0' per permettere di non stampare le celle non inizializzate?
Il '\0' è un carattere speciale che indica la terminazione della stringa. Quindi se tu parti da i=0 e prosegui avanti, vuoi arrivare fino al carattere terminatore. Ecco perché ogni carattere è != '\0', perché è se tu dicessi "ciclo fino a quando il carattere i-esimo è diverso da quello di terminazione". Se tu invece poni == '\0', allora stai dicendo che cicli fino a quando ogni carattere i-esimo che valuti è quello di terminazione, cosa ovviamente non vera.
Al momento non do lezioni private, per via del poco tempo. Per quanto riguarda avevo spiegato nel video riguardante la gestione dell'output, che serve per mandare a capo l'output ( = newline)
Fgets prende l'intera riga inserita. Quindi se per esempio lo stream da cui prelevi l'input è la tastiera (stdin) e premi invio per confermare quanto inserito allora quell'invio è un . Al contrario se a fine stringa inserisci EOF (le combinazioni per questo carattere mi sembra di averle dette), allora la stringa non si conclude con quell'invio a capo e pertanto non c'è . Le funzione getchar e putchar sono state trattate nelle lezioni di input e output a inizio corso.
@@ProgrammazioneTimeOfficial Grazie della risposta. Cmq continuo a non capire perché nella fgets mi inserisce un carattere in più rispetto a gets; a fine frase.
Perché premendo il tasto invio dalla tastiera (che è il tuo stream stdin) tu gli stai dando quel carattere, ovvero . Quindi è normale che ci sia. Se provi a interromperla con EOF non prendi il (devi guardarti la combinazione di tasti se sei da Linux/Mac os, Windows).
Ciao, non mi è chiara una cosa......Se una stringa è un vettore di caratteri, e quindi un vettore di caratteri è a sua volta una stringa, come li si differenziano? Qualè la differenza principalentra tra le 2? Se ho capito bene, l'unica differenza sta nel carattere terminatore, inserito automaticamente per le stringhe e manualmente nei vettori di caratteri. Giusto? Grazie i tuoi video ho potuto ripredere in mano il c dopo 2 anni di fermo, grazie
Scanf prende in input solo singole stringhe, quindi appena trova uno spazio capisce che è finita. Tuttavia puoi aumentare il numero di variabili per prendere più singole parole: scanf("%s %s %s", str1, str2, str3); Altrimenti se vuoi fare più parole in una singola variabile usi fgets
Enormi differenze. Semmai la somiglianza è tra atof e atoi e tra strtod e strtol. Atof e atoi convertono una stringa (presa come parametro di funzione) rispettivamente in un numero a virgola mobile (double) e un numero intero (int). Mentre strtod e strtol estrapolano da una stringa un numero presente all'intero (rispettivamente in virgola mobile e in intero). Il numero estrapolato viene ritornato dalla funzione, mentre alla stringa viene rimosso quel valore numerico (è un gioco con puntatori, banalmente si ritorna il puntatore di inizio testo dopo il numero)
notifico un errore al minuto 10:49
-Un valore maggiore di 0 se str1 > str2;
-Un valore minore di 0 se str1 < str2;
dovrebbe essere così invece nel video sono stati messi i segni minore e maggiore opposti.
Non sto capendo una cosa, se il Black Smash 0 non permette al compilatore di stampare quello che c'è dopo nel vettore, perché la poniamo la Stringa nel ciclo diversa da '\0'? È un contro senso non dev'essere str[i] == '\0' per permettere di non stampare le celle non inizializzate?
Il '\0' è un carattere speciale che indica la terminazione della stringa.
Quindi se tu parti da i=0 e prosegui avanti, vuoi arrivare fino al carattere terminatore. Ecco perché ogni carattere è != '\0', perché è se tu dicessi "ciclo fino a quando il carattere i-esimo è diverso da quello di terminazione".
Se tu invece poni == '\0', allora stai dicendo che cicli fino a quando ogni carattere i-esimo che valuti è quello di terminazione, cosa ovviamente non vera.
@@ProgrammazioneTimeOfficial fai lezioni private online?
@@ProgrammazioneTimeOfficial un altra cosa, non ho capito cosa rappresenta Back stage
?
Al momento non do lezioni private, per via del poco tempo.
Per quanto riguarda
avevo spiegato nel video riguardante la gestione dell'output, che serve per mandare a capo l'output (
= newline)
Quindi su fgets viene aggiunto un '
' alla fine della frase inserita?
E le funzioni getchar e putchar?
Cmq bel video!
Fgets prende l'intera riga inserita. Quindi se per esempio lo stream da cui prelevi l'input è la tastiera (stdin) e premi invio per confermare quanto inserito allora quell'invio è un
. Al contrario se a fine stringa inserisci EOF (le combinazioni per questo carattere mi sembra di averle dette), allora la stringa non si conclude con quell'invio a capo e pertanto non c'è
.
Le funzione getchar e putchar sono state trattate nelle lezioni di input e output a inizio corso.
@@ProgrammazioneTimeOfficial Grazie della risposta. Cmq continuo a non capire perché nella fgets mi inserisce un carattere in più rispetto a gets; a fine frase.
Perché premendo il tasto invio dalla tastiera (che è il tuo stream stdin) tu gli stai dando quel carattere, ovvero
. Quindi è normale che ci sia. Se provi a interromperla con EOF non prendi il
(devi guardarti la combinazione di tasti se sei da Linux/Mac os, Windows).
@@ProgrammazioneTimeOfficial AAAAAhhhhh capito. Più semplice di quello che sembrava xd.
Ciao, non mi è chiara una cosa......Se una stringa è un vettore di caratteri, e quindi un vettore di caratteri è a sua volta una stringa, come li si differenziano? Qualè la differenza principalentra tra le 2? Se ho capito bene, l'unica differenza sta nel carattere terminatore, inserito automaticamente per le stringhe e manualmente nei vettori di caratteri. Giusto?
Grazie i tuoi video ho potuto ripredere in mano il c dopo 2 anni di fermo, grazie
La stringa è gestita come un vettore di caratteri, nel C non c'è un tipo di dati primitivo per le stringhe (a differenza dei linguaggi a oggetti)
Ciao esiste un modo per acquisire stringhe contenente spazi con scanf?
Scanf prende in input solo singole stringhe, quindi appena trova uno spazio capisce che è finita. Tuttavia puoi aumentare il numero di variabili per prendere più singole parole:
scanf("%s %s %s", str1, str2, str3);
Altrimenti se vuoi fare più parole in una singola variabile usi fgets
C'è differenza tra atof() e strtod()? E tra atoi() e strtol()?
Enormi differenze. Semmai la somiglianza è tra atof e atoi e tra strtod e strtol.
Atof e atoi convertono una stringa (presa come parametro di funzione) rispettivamente in un numero a virgola mobile (double) e un numero intero (int).
Mentre strtod e strtol estrapolano da una stringa un numero presente all'intero (rispettivamente in virgola mobile e in intero). Il numero estrapolato viene ritornato dalla funzione, mentre alla stringa viene rimosso quel valore numerico (è un gioco con puntatori, banalmente si ritorna il puntatore di inizio testo dopo il numero)
@@ProgrammazioneTimeOfficial Perfetto, grazie mille.