Vai al contenuto

linguaggio c


Messaggi raccomandati

Salve a tutti,vi spiego in breve il mio problema,sto studiando il c tramite libri( Brian W. Kernighan, Dennis M. Ritchie) video corsi (Raffaele Meo) sto seguendo un percorso molto lento infatti vorrei capire/afferrare tutto prima di andare avanti.Faccio molti esercizi(con xcode) prima di proseguire ma ora mi trovo in difficoltà,sono arrivato alle funzioni,quindi non conosco ancora i puntatori e tutta la roba che viene dietro,bene il mio problema è il seguente:

#include <stdio.h>

#define MAXLINE 100

int main ()

{

int len;

int max;

char line[MAXLINE];

char save[MAXLINE];

max=0;

while (len=getline(line,MAXLINE))>0)

if (len>max) {

max=len;

copy(len,save);

}

if (max>0)

printf("%s",save);

}

questo programmino non funziona,ma il fatto è che gedit(linux)si!quindi deve essere un discorso di librerie o di standard,ora siccome vorrei continuare a studiare con xcode chi mi può dare una mano?

ringrazio tutti!

Link al commento
Condividi su altri siti

Ciao, prima cosa, sei sicuro che su gedit funziona?

Poi, premettendo che non ho mai usato getline, quando esiste fgets che è molto più nota, e quindi ipotizzo solo come possa funzionare getline, non capisco questa riga:

while (len=getline(line,MAXLINE))>0)

Perchè assegni una stringa a una variabile intera?

Link al commento
Condividi su altri siti

no scusa l'esempio corretto è:

while ((len=getline(line,MAXLINE))>0).

e poi un altra cosa la funzione copy sembra non esistere.

un altra cosa ,non può essere perché gli esempi del libro sono fatti in ANSI c?

scusa per le domande poco stimolanti...

Link al commento
Condividi su altri siti

Io inizio a pensare sia C++! Copy() che io sappia in C non c'è...semmai strcpy ma non centra niente! Al contrario copy esiste in C++.

Ugualmente getline è una funzione poco usata in C e a quanto leggo sviluppata in seguito da GNU e non nel C originale, mentre è parte integrante di C++...

Link al commento
Condividi su altri siti

Vi ringrazio,per le risposte , ora posterò l'intero codice così magari sarà più chiaro

#include <stdio.h>

#define MAXLINE 1000

prendi(s,lim)

char s[];

int lim;

{

int c,i;

for (i=1; i<lim-1 && (c=getchar())!=EOF && c!='\n'; ++i)

s=c;

if (c=='\n') {

s=c;

++i;

}

s='\0';

return (i);

}

copy(s1,s2)

char s1[],s2[];

{

int i;

i=0;

while ((s2=s1!='\0'))

++i;

}

int main()

{

int len;

int max;

char line[MAXLINE];

char save[MAXLINE];

max=0;

while ((len==prendi(line,MAXLINE))>0)

if (len>max){

max=len;

copy(line,save);

}

if (max>0)

printf("%s",save);

}

...questo programma dovrebbe stampare la linea di testo più lunga.

effettivamente le funzioni le dovevo fare io,ma il fatto è che non funziona lo stesso!

la funzione "prendi"è stata nominata così in quanto nominandola getline va in errore.

questo il link con l'esercizio.
Link al commento
Condividi su altri siti

Vi ringrazio,per le risposte , ora posterò l'intero codice così magari sarà più chiaro

A parte il fatto che scritto così il codice è quasi illeggibile, dovresti almeno indentarlo.

Anche perché tutti i cicli li usi senza parentesi graffe, quindi mi viene in mente che potresti anche aver considerato male l'esecuzione delle varie istruzioni.

Inoltre sulla dichiarazione della funzione prendi() manca il valore di ritorno.

Dovresti fare lo sforzo di riscrivere per bene il codice, in modo da renderlo almeno leggibile.

E magari indicare per ogni funzione quello che ti aspetti che faccia e cosa dovrebbe fare in generale il programma stesso.

Marco - Gallery

MacBook Nero 2.2 GHz Intel Core 2 Duo - 4 GB RAM - Mac OS X 10.6 Snow Leopard

Link al commento
Condividi su altri siti

Ti ringrazio dj, ho capito cosa intendi!per quanto riguarda il libro fin ora sono andato avanti senza tanti intoppi ,"tranne che per EOF"che per mac è diverso,il fatto è che questo è il primo esercizio sulle stringe ,ma mi sembra già molto difficile,credo che faro un piccolo passo indietro,tipo fare un programma che mi memorizza solo una stringa e lavorarci un po su!grazie ancora per il tuo aiuto ed il vostro aiuto!

Link al commento
Condividi su altri siti

  • 2 settimane dopo...

Salve dopo tante prove ho risolto il problema precedente,ma ora mi trovo con un altro problema:

// visualizza i corrispettivi simboli della tabella ascii

#include <stdio.h>

int main()

{

for (int a=0; a<=255; ++a) {

if (a % 20 ==0 && a>0) { //stop a 20 ,e premi invio per continuare.

getchar();

}

else printf ("\n%d %c",a,a);

}

return 0;

}

In pratica non mi stampa i corrispondenti ascii dal 128 in poi.

Perché ?

Link al commento
Condividi su altri siti

Beh... il discorso si fa un pochettino lungo... dai un'occhiata qui che è spiegato: http://stackoverflow...cters-above-126

In poche parole... l'ascii è a 7bit, quindi da 0 a 127. Quello chiamato "extended ascii" non è standard e dipende un po' di cose..

In particolare.. il terminale su os x è in utf8, e quindi supporta direttamente i caratteri fino a 127. Oltre a quel carattere si aspetta un carattere unicode (quindi con almeno 2 bytes)..

PS: nel tuo programma ti dimentichi di stampare un numero.. cioè.. quando fai la "pausa" poi non stampi quel carattere...

Link al commento
Condividi su altri siti

  • 2 settimane dopo...

Salve ho fatto un programma che converte i char presi da tastiera tramite getchar() in interi ,volevo farlo quanto più piccolo possibile questo è il risultato

#include <stdio.h>

#define max 100

int main(){

int i,c,a;

char let[max];

for (i=0; i<=max-1 && (c=getchar())!=EOF; ++i){

let=c;

++a;//punta al numero di interi

}

let='\0';

printf("\n%s",let);

for (i=0; i<=a-1; ++i) {

printf("\n%d",let);

}

}

ci può essere una versione più ridotta?

ripeto che sto studiando da autodidatta,perciò mi scuso per eventuali errori macroscopici.

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...