PDA

View Full Version : informazione elementare


Vasec87
24-11-2006, 11:41
cosa posso scrivere al termine di un programma in c per visualizzare il risultato, cioè per non far chiudere la finestra?

mi avevano detto di scrivere qualcosa con getchar..premere invio, ma ora non me la ricordo piu
grazie

andbin
24-11-2006, 11:52
cosa posso scrivere al termine di un programma in c per visualizzare il risultato, cioè per non far chiudere la finestra?Leggi <questo> (http://www.hwupgrade.it/forum/showthread.php?t=1323690) thread.

Vasec87
24-11-2006, 11:59
altra domandina, cosa c'è che non va in questo semplicissimo programma

#include <stdio.h>
#incldue <ctype.h>

int main()
{
char c;
scanf("%c", c);

printf("'%c' %s\n",c, isdigit(c)?"Vero\n":"Falso");
printf("'%c' %s\n",c, isalpha(c)?"Vero\n":"Falso");
printf("'%c' %s\n",c, isalnum(c)?"Vero\n":"Falso");
printf("'%c' %s\n",c, isxdigit(c)?"Vero\n":"Falso");
printf("'%c' %s\n",c, islower(c)?"Vero\n":"Falso");
printf("'%c' %s\n",c, isupper(c)?"Vero\n":"Falso");
printf("'%c' %s\n",c, tolower(c)?"Vero\n":"Falso");
printf("'%c' %s\n",c, toupper(c)?"Vero\n":"Falso");
printf("'%c' %s\n",c, isspace(c)?"Vero\n":"Falso");
printf("'%c' %s\n",c, iscntrl(c)?"Vero\n":"Falso");
printf("'%c' %s\n",c, ispunct(c)?"Vero\n":"Falso");
printf("'%c' %s\n",c, isprint(c)?"Vero\n":"Falso");
printf("'%c' %s\n",c, isgraph(c)?"Vero\n":"Falso");
}

andbin
24-11-2006, 12:06
scanf("%c", c);Devi passare alla scanf l'indirizzo della variabile 'c'.

scanf("%c", &c);

Questo perché la scanf deve poter scrivere nella variabile.

Vasec87
24-11-2006, 12:09
non funziona lo stesso

9 C:\Documents and Settings\Va\Desktop\1.cpp `isdigit' undeclared (first use this function)


mi dice questo per ogni funzione

lovaz
24-11-2006, 12:10
Hai scritto
#incldue
invece di
#include

Vasec87
24-11-2006, 12:12
ora funziona

Vasec87
24-11-2006, 12:17
devo fare un programmino che converte uina stringa in maiuscolo

ho scritto questo ma non va


#include <stdio.h>
#include <windows.h>
#include <ctype.h>
int main()
{
char s[100];
int i;
gets(s);

for(i=0:i<100;i++){
printf(toupper(s[i]));}

system("PAUSE");}

lovaz
24-11-2006, 12:19
printf("%c", toupper(s[i]));

Vasec87
24-11-2006, 12:22
non funzionava perchè avevo messo i : al posto del ;

ora il programma va, però escono tutti simboli strani

#include <stdio.h>
#include <windows.h>
#include <ctype.h>
int main()
{
char s[100];
int i;
gets(s);

for(i=0;i<100;i++){
printf("%c",toupper(s[i]));}

system("PAUSE");}

andbin
24-11-2006, 12:27
ora il programma va, però escono tutti simboli straniCosì stampi sempre 100 caratteri anche se magari ne hai inseriti di meno. Usa strlen() per ottenere la lunghezza della stringa.

lovaz
24-11-2006, 12:30
oppure ci metti un

if(s[i] == '\0')
break;

Vasec87
24-11-2006, 12:31
ho messo l'if e funziona

grazie

Vasec87
24-11-2006, 12:42
Si scriva un programma che prenda in input quattro stringhe che rappresentino degli interi, le converta in interi, sommi i valori ottenuti e visualizzi il loro totale

#include <stdio.h>
#include <windows.h>
#include <stdlib.h>

int main()
{
int a=0;
int b=0;
int c=0;
int d=0;
int somma=0;
char s1[100];
char s2[100];
char s3[100];
char s4[100];

gets(s1);
gets(s2);
gets(s3);
gets(s4);

a=atoi(s1);
b=atoi(s2);
c=atoi(s3);
d=atoi(s4);

somma=a+b+c+d;

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



system("PAUSE");}


perchè non funziona??

rispondete pure, io torno tra un po

andbin
24-11-2006, 12:52
perchè non funziona??Il programma è ok, per quale motivo dici che non funziona? :stordita:

(continui a includere windows.h che non so a cosa ti serva ma non è quello un problema).

Vasec87
24-11-2006, 13:06
cioè funziona, ma mi da 0 come somma degli interi delle stringhe. come mai?



windows.h lo metto perchè mi sembra che senza il system pause non funziona

andbin
24-11-2006, 13:15
cioè funziona, ma mi da 0 come somma degli interi delle stringhe. come mai?Dipende da cosa inserisci ...

windows.h lo metto perchè mi sembra che senza il system pause non funzionaSe includi già stdlib.h per system() è già ok. Non c'entra nulla con windows.h.

Vasec87
24-11-2006, 13:21
se inserisco solo numeri funziona

ma se metto le lettere non le converte in numeri??

andbin
24-11-2006, 13:26
se inserisco solo numeri funziona

ma se metto le lettere non le converte in numeri??Ma ... stai scherzando??? :mbe:

A parte che la funzione atoi(), per come è stata progettata, si ferma al primo carattere non riconosciuto come valido. Se inserisci "42abc", prende solo 42.

Vasec87
24-11-2006, 13:28
non lo sapevo



comq ho fatto un altro esercizio che dovrebbe confrontare due stringhe ma non so bene cosa scriverci dentro il printf

#include <stdio.h>
#include <windows.h>
#include <stdlib.h>

int main()
{

const char s1[100];
const char s2[100];


gets(s1);
gets(s2);

printf(strcmp(s1,s2));

system("PAUSE");}

andbin
24-11-2006, 13:32
printf(strcmp(s1,s2)); strcmp ritorna un valore:
minore di 0 se s1 < s2
maggiore di 0 se s1 > s2
uguale a 0 se s1 = s2

Poi spetta a te stampare una informazione specifica per ognuno dei 3 casi.

E comunque non è corretta la printf che hai scritto. Il primo parametro deve essere comunque la stringa di formato.

Vasec87
24-11-2006, 13:42
si ma non so il modo in cui devo scriverlo, in quale posizione, ecc.

ho copiato questo dal libro, che significa?

printf("%s%s\n%s%s\n%s%s\n\n%s%2d\n%s%2d\n%s%2d\n\n",
"s1= ", s1, "s2= ", s2,"strcmp(s1,s2)= "), strcmp(s1,s2));


a che cosa servono tutti quei %s

andbin
24-11-2006, 13:48
printf("%s%s\n%s%s\n%s%s\n\n%s%2d\n%s%2d\n%s%2d\n\n",
"s1= ", s1, "s2= ", s2,"strcmp(s1,s2)= "), strcmp(s1,s2)); Non so da dove l'hai presa ma è sbagliata ... già solo come sintassi (c'è una ')' di troppo) e poi comunque ha più specificatori di formato di quanti sono realmente i valori passati (stamperebbe schifezze).


Fai così:
int r;
....

r = strcmp (s1, s2);

if (r < 0)
printf ("s1 è minore di s2\n");
else if .... completa tu ....
....

Vasec87
24-11-2006, 13:49
a quindi non devo mettere per forza tutto dentro printf, posso usare anche altre variabili. perfetto

andbin
24-11-2006, 13:52
a quindi non devo mettere per forza tutto dentro printf, posso usare anche altre variabili. perfettoDipende da come vuoi stampare l'informazione per i 3 casi.

Potrebbe bastare:
printf ("risultato: %d\n", strcmp (s1, s2));Ma così stamperebbe solo un banale numero ...

Vasec87
24-11-2006, 13:52
#include <stdio.h>
#include <windows.h>
#include <string.h>

int main()
{

const char s1[100];
const char s2[100];
int a;

gets(s1);
gets(s2);

a=strcmp(s1,s2);

if(a>0){ printf("a\n");
if(a<0){ printf("b\n");
if(a=0){ printf("c\n");


system("PAUSE");}


non fare caso a quello che ho scritto nei printf, l'ho messo solo per vedere su funziona. però mi da un errore, dice unitizlized const 's1'. che significa?

Vasec87
24-11-2006, 13:53
mi so scordato di chiude le graffe

ma me lo da lo stesso l'errore

Vasec87
24-11-2006, 13:54
ho provato a togliere il const e funziona

jappilas
24-11-2006, 14:23
però mi da un errore, dice unitizlized const 's1'. che significa?
dichiarare una variabile const (constant) ha lo scopo di generare degli errori se in altre parti del codice si effettuano delle sovrascritture (modifoche del valore) che si è sicuri non abbiano ragione d' essere per quella variabile
poichè una variabile dichiarata costante può essere solo inizializzata e mai più modificata, l' inizializzazione è essenziale
ora, tu hai tolto il const per far sparire l' errore, ma lasci s1 ed s2 non inizializzate: se non ricordo male, provando a stamparne il valore, dovresti ottenere un valore casuale

andbin
24-11-2006, 14:31
ma lasci s1 ed s2 non inizializzate: se provassi a stamparne il valore, dovresti ottenere un valore casualeBeh, certo ... se le stampi prima delle gets!

Ma ci sono le gets che scrivono nel buffer sempre qualcosa, come minimo il nullo finale. Quindi non è necessario inizializzare quei buffer.

jappilas
24-11-2006, 14:43
Beh, certo ... se le stampi prima delle gets!

Ma ci sono le gets che scrivono nel buffer sempre qualcosa, come minimo il nullo finale. Quindi non è necessario inizializzare quei buffer.giusto... ammetto di aver letto il post di sfuggita e di non aver fatto caso alle gets :O