Cosa si intende per tipo status?
cos'è un tipo status in un programma in c?
c'è un esercizio che mi richiede di definire un tipo status i cui possibili valori sono ERROR e OK
c'è un esercizio che mi richiede di definire un tipo status i cui possibili valori sono ERROR e OK
Risposte
E' un "qualcosa", tipo un valore numerico, che ti serve per segnalare lo stato di un'operazione, ad esempio, se si è conclusa con successo (OK) o se si è verificato un errore (ERROR).
Esempio:
In questo caso potresti assegnare a OK il valore 0 e a ERROR il valore 1. Serve anche per rendere più chiaro/leggibile il codice, per questo in genere si usano delle #define.
Esempio:
if ( /* condizione vera */) return OK; else return ERROR;
In questo caso potresti assegnare a OK il valore 0 e a ERROR il valore 1. Serve anche per rendere più chiaro/leggibile il codice, per questo in genere si usano delle #define.
"anonymous_be1147":
E' un "qualcosa", tipo un valore numerico, che ti serve per segnalare lo stato di un'operazione, ad esempio, se si è conclusa con successo (OK) o se si è verificato un errore (ERROR).
Esempio:
if ( /* condizione vera */) return OK; else return ERROR;
In questo caso potresti assegnare a OK il valore 0 e a ERROR il valore 1. Serve anche per rendere più chiaro/leggibile il codice, per questo in genere si usano delle #define.
e come si inizializza un tipo status???
te lo chiedo perchè ho da fare una funzione del tipo
"status cutString"
Puoi provare così:
typedef enum status
{
OK=0,
ERROR
}status;
status func();
int main()
{
status var;
}
Ciao
typedef enum status
{
OK=0,
ERROR
}status;
status func();
int main()
{
status var;
}
Ciao
ah! quindi devo fare una struttura?
Se ho capito bene il problema si.
Non mi vengono in mente altre possibilità.
Non mi vengono in mente altre possibilità.
il problema è:
data una riga di testo devo fare una funzione status Cutstring(char s[], int n) che mantiene tutti i caratteri di indice minore di n.
La funzione restituisce OK se l'operazione ha effetto, ERROR se non è eseguibile (n<0).
il problema è quello status cutstring
data una riga di testo devo fare una funzione status Cutstring(char s[], int n) che mantiene tutti i caratteri di indice minore di n.
La funzione restituisce OK se l'operazione ha effetto, ERROR se non è eseguibile (n<0).
il problema è quello status cutstring
nessuno mi sa rispondere?
Prova a utilizzare la struttura come dicevo nel post precedente.
Ciao
Ciao
Ti basta definire, secondo me, due macro ed una ridefinizione del tipo int:
#define ERROR 0;
#define OK 1;
typedef int STATUS;
Poi definisci la funzione con un ritorno STATUS al quale assegni ERROR oppure OK.
Ad esempio
STATUS stat = -1; //inizializzazione
stat = Cutstring (....);
if (stat == ERROR)
......
if (stat == OK)
......
Il prototipo della funzione Cutstring deve avere STATUS come ritorno
dz
#define ERROR 0;
#define OK 1;
typedef int STATUS;
Poi definisci la funzione con un ritorno STATUS al quale assegni ERROR oppure OK.
Ad esempio
STATUS stat = -1; //inizializzazione
stat = Cutstring (....);
if (stat == ERROR)
......
if (stat == OK)
......
Il prototipo della funzione Cutstring deve avere STATUS come ritorno
dz
mi da dei problemi la chiamata a funzione!
cosa sbaglio???
#include
#include
#define N 30
#define ERROR 0
#define OK 1
typedef int status;
int readline(char s[])
{
int i;
i=0;
printf("scrivi una riga di testo: ");
while(s[i-1]!='\n')
{
s=getchar();
i++;
}
return i-1;
}
status cutString(char s[];int n)
{
int j;
printf("\nla stringa diventa:");
j=0;
while(j
{
printf("%c", s[j]);
j++;
}
if(n>=0)
{
return 1;
}
else
{
return 0;
}
}
main()
{
char s[N];
int Lung,n;
status cut=-1;
Lung=readline(s);
printf("\nIl numero dei caratteri letti e' %d\n", Lung);
printf("inserisci un intero n: ");
scanf("%d", &n);
cut=cutString(s,n);
if(cut==ERROR)
{
printf("ERROR");
}
if(cut==OK)
{
printf("OK\n");
}
system("PAUSE");
return 0;
}
cosa sbaglio???
#include
#include
#define N 30
#define ERROR 0
#define OK 1
typedef int status;
int readline(char s[])
{
int i;
i=0;
printf("scrivi una riga di testo: ");
while(s[i-1]!='\n')
{
s=getchar();
i++;
}
return i-1;
}
status cutString(char s[];int n)
{
int j;
printf("\nla stringa diventa:");
j=0;
while(j
printf("%c", s[j]);
j++;
}
if(n>=0)
{
return 1;
}
else
{
return 0;
}
}
main()
{
char s[N];
int Lung,n;
status cut=-1;
Lung=readline(s);
printf("\nIl numero dei caratteri letti e' %d\n", Lung);
printf("inserisci un intero n: ");
scanf("%d", &n);
cut=cutString(s,n);
if(cut==ERROR)
{
printf("ERROR");
}
if(cut==OK)
{
printf("OK\n");
}
system("PAUSE");
return 0;
}
Ci sono alcune imprecisioni: mancano i prototipi delle due funzioni e gli elenchi dei loro argomenti vanno separati da una virgola.
A parte questo, il malfunzionamento potrebbe essere dovuto al fatto che non contrassegni la fine della stringa immessa ad esempio con un carattere di '\0'.
A parte questo, il malfunzionamento potrebbe essere dovuto al fatto che non contrassegni la fine della stringa immessa ad esempio con un carattere di '\0'.
"anonymous_be1147":
Ci sono alcune imprecisioni: mancano i prototipi delle due funzioni e gli elenchi dei loro argomenti vanno separati da una virgola.
A parte questo, il malfunzionamento potrebbe essere dovuto al fatto che non contrassegni la fine della stringa immessa ad esempio con un carattere di '\0'.
ok risolto! erano gli argomenti che non erano separati da virgola!
se dovessi inserire un'altra stringa in che modo posso fare?
Puoi usare un ciclo for, oppure un while, magari facendo terminare l'immissione da un INVIO, così:
Probabilmente dovrai aggiungere una (void)getchar() per "mangiare" il carattere d'INVIO presente in input dopo la richiesta del numero intero.
Comunque, secondo me, dovresti usare un terminatore di stringa ed effettuare un controllo sull'input, come detto...
while ((Lung = readline(s)) > 0) { /* istruzioni */ }
Probabilmente dovrai aggiungere una (void)getchar() per "mangiare" il carattere d'INVIO presente in input dopo la richiesta del numero intero.
Comunque, secondo me, dovresti usare un terminatore di stringa ed effettuare un controllo sull'input, come detto...
ho provato a scrivere un'altra stringa ma se metto il ciclo utilizzato per la prima, non mi fa scrivere nulla
intendo queste
int i;
i=0;
printf("scrivi una riga di testo: ");
while(s[i-1]!='\n')
{
s=getchar();
i++;
}

intendo queste
int i;
i=0;
printf("scrivi una riga di testo: ");
while(s[i-1]!='\n')
{
s=getchar();
i++;
}
possibile che con lo stesso procedimento usando getchar, mi dia dei problemi?
Non ho ben capito qual è il problema che ti dà, comunque intendevo una cosa del tipo::
Funziona senz'altro su sistemi Linux e similari, non ho provato in Windows, ma le eventuali modifiche da fare dovrebbero essere minime.
#include <stdio.h> #include <stdlib.h> #define N 30 #define ERROR 0 #define OK 1 typedef int status; int readline (char s[]); status cutString(char s[], int n); int readline(char s[]) { int i; i = 0; printf("scrivi una riga di testo: "); do { s[i] = getchar(); i++; } while (s[i - 1] != '\n'); s[i] = '\0'; return i - 1; } status cutString(char s[], int n) { int j; printf("\nla stringa diventa: "); j = 0; while (j < n && s[j] != '\0') { printf("%c", s[j]); j++; } printf("\n"); if (n >= 0) { return OK; } else { return ERROR; } } int main(void) { char s[N]; int Lung, n; status cut = -1; while ((Lung = readline(s)) > 0) { printf("\nIl numero dei caratteri letti e' %d\n", Lung); printf("inserisci un intero n: "); scanf("%d", &n); /* rimuove il carattere di INVIO */ (void)getchar(); cut = cutString(s, n); if (cut == ERROR) { printf("ERROR\n"); } if (cut == OK) { printf("OK\n"); } } system("PAUSE"); return 0; }
Funziona senz'altro su sistemi Linux e similari, non ho provato in Windows, ma le eventuali modifiche da fare dovrebbero essere minime.
sisi questo l'ho fatto per la stringa s
ma ora devo definire e leggere un'altra stringa t....e ho problemi nel farlo
in poche parole ho riproposto il ciclo della funzione redline ma in questo caso leggo la seconda stringa
il problema è che il ciclo non finisce mai
la scrivo!
int length(char t[])
{
int k;
printf("scrivi la riga di testo della seconda stringa: ");
k=0;
while(t[k-1]!='\n')
{
scanf("%s", &t[k]);
k++;
}
ma ora devo definire e leggere un'altra stringa t....e ho problemi nel farlo

in poche parole ho riproposto il ciclo della funzione redline ma in questo caso leggo la seconda stringa
il problema è che il ciclo non finisce mai
la scrivo!
int length(char t[])
{
int k;
printf("scrivi la riga di testo della seconda stringa: ");
k=0;
while(t[k-1]!='\n')
{
scanf("%s", &t[k]);
k++;
}
Manca una graffa di chiusura?
Comunque, mi pare che ci siano innanzitutto due imprecisioni:
Comunque, mi pare che ci siano innanzitutto due imprecisioni:
[*:3mc956h1] se k=0 allora t[k-1] è t[-1], il che può non essere una cosa bella

[*:3mc956h1] nella scanf() forse volevi mettere come specifica di formato %c[/*:m:3mc956h1][/list:u:3mc956h1]
A parte questo, è possibile che entri in un ciclo infinito perché la stringa passata t[] non termina con \n. Ribadisco quindi che forse è meglio nella readline() aggiungere un terminatore (es. \0) e soprattutto leggere soltanto N -1 caratteri.
"anonymous_be1147":
Manca una graffa di chiusura?
Comunque, mi pare che ci siano innanzitutto due imprecisioni:
[*:22yn65sc] se k=0 allora t[k-1] è t[-1], il che può non essere una cosa bella[/*:m:22yn65sc]
[*:22yn65sc] nella scanf() forse volevi mettere come specifica di formato %c[/*:m:22yn65sc][/list:u:22yn65sc]
A parte questo, è possibile che entri in un ciclo infinito perché la stringa passata t[] non termina con \n. Ribadisco quindi che forse è meglio nella readline() aggiungere un terminatore (es. \0) e soprattutto leggere soltanto N -1 caratteri.
ho fatto quelle correzioni, ma ora invece non mi fa scrivere nulla...devo riuscire a finirlo!

Se puoi posta l'intero listato o mandamelo tramite PM, perché è difficile scoprire dov'è il bug senza vedere il sorgente.
