View Full Version : [C] Errore durante compilazione programma
rikkaidd
15-12-2009, 20:31
Sto studiando il C da alcune ore,e man mano che vado avanti faccio degli esercizi per ricordarmi meglio il codice ,ma nel caso sotto elencato mi sono bloccato poichè il compilatore mi restituisce un errore;sapreste spiegarmi,per favore,come ultimare bene il codice sotto elencato e magari spiegarmi la motivazione.
La guida che stò studiando è questa :http://www.blacklight.gotdns.org/wiki/index.php/Controllare_il_flusso_di_un_programma , proprio nella pagina dove ho trovato questo codice:
int i=0;
while (i<10) {
printf ("Valore di i: %d\n",i);
i++;
}
Io ho provato a completarlo in diversi modi (naturalmente includendo le librerie etc...) ma senza riuscire a farlo funzionare.
BlackAuron
15-12-2009, 20:42
#include<stdio.h>
#include<stdlib.h>
int main() {
int i = 0;
while (i < 10) {
printf("Valore di i: %d\n", i);
i++;
}
return 0;
}
Il pezzo i sorgente che hai postato è corretto, probabilmente hai commesso qualche errore altrove. Ti ho incollato qua sopra un sorgente che compila senza problemi
rikkaidd
15-12-2009, 21:20
grazie il mio errore era quello di omettere le parentesi graffe dopo il main
BlackAuron
15-12-2009, 21:24
... io lo potrei pure controllare, ma tu posta tutto, librerie e main compreso, e di che errore ti da ... se stai sul generico non ne esci fuori
rikkaidd
15-12-2009, 22:00
Grazie ho risolto,scusa se approfitto della tua disponibilità ma se io vorrei fare un programmino dove una variabile non è rappresentata solo da un numero o lettera ma bensi dalla parola ciao come dovrei fare?(anche perchè char si limita a 8 bite):
es: il valore della variabile è ciao,
output a video:- salutami
imput :ciao //bene !termina il programma ma nel caso la risposta fosse diversa da ciao si ripete il prinft che scrive a schermo salutami
Penso che scrivere una cosa del genere non abbia significato:
#include<stdio.h>
main() {
char n;
while (n!=ciao) {
printf ("salutami : ");
scanf ("%s",&n);
printf ("Numero inserito: %s\n",n);
}
}
BlackAuron
15-12-2009, 22:06
vai al capitolo stringhe della guida
rikkaidd
15-12-2009, 22:32
Ok ho provato questo ma quando metto ciao non chiude il programma
#include<stdio.h>
#include <string.h>
main() {
char d[4];
while (d!="ciao") {
printf ("salutami : ");
scanf ("%s",&d);
printf ("Salutami: %s\d",d);
}
return 0;
}
io vorrei fare una cosa simile a questo ma con la scritta ciao,ma non ci riesco(usando while)
int n;
while (n!=0) {
printf ("Inserisci un numero (0 per finire): ");
scanf ("%d",&n);
printf ("Numero inserito: %d\n",n);
}
ho provato anche così
#include<stdio.h>
#include <string.h>
main() {
char d[4];
while (d!="ciao") {
printf ("salutami : ");
scanf ("%s",&"ciao");
printf ("Salutami: %s\d",d);
}
return 0;
}
masteryuri
16-12-2009, 00:21
Come ti è già stato consigliato, devi lavorare sulle stringhe.
Il seguente codice fa ciò che desideri.
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "ciao"; /* maniera veloce e comoda per dichiarare una stringa*/
char str2[10];
while (strcmp(str1,str2)) /* Compara le due stringhe */
{
system("clear"); /* clear per UNIX, cls per microsoft */
printf("Salutami! ");
scanf ("%s",str2);
}
return 0;
}
Ho utilizzato la funzione strcmp, che compara due stringhe e restituisce zero se sono uguali, un valore più grande di zero se sono disuguali.
La funzione è definita nella libreria string.h, che quindi va inclusa.
Di seguito qualche rimando teorico.
Stringhe (http://www.dis.uniroma1.it/~degiacom/didattica/informatica_grafica/00-11-10/stringhe.c)
Funzione strcmp (http://www.cplusplus.com/reference/clibrary/cstring/strcmp/)
In ogni caso, per qualsiasi dubbio chiedi pure.
rikkaidd
16-12-2009, 00:44
Grazie, come ho detto prima stò studiando il C da poche ore e non conosco nessun altro linguaggio di programmazione :muro:
A pensare che dopo devo passare alla OOP :doh:
Pero questo funzionava;infatti una volta scritto ciao e fatto invio il programma si chiudeva...solo perchè andava in errore :)
#include<stdio.h>
#include <string.h>
main() {
char d[4];
while (d!="ciao") {
printf ("salutami : ");
scanf ("%s",&"ciao");
printf ("Salutami: %s\d",d);
}
return 0;
}
Sicuramente un libro e mille volte meglio di un manuale in internet, ma sto studiando il c come punto di partenza per riuscire a capirci qualcosa del c++ e del visul basic.
Conosco l'html (questo si impara in due ore per fortuna!) vorrei imparare anche il javascript e il php
masteryuri
16-12-2009, 00:46
Se posso consigliarti un libro, usa IL LINGUAGGIO C di Kernighan - Ritchie
rikkaidd
17-12-2009, 21:48
Anche se và off-topic,e sperando di non fare incavolare i moderatori,vi chiedo ancora aiuto.. (era meglio che mettevo come titolo :aiuto sono un n00b...)
è proprio vero studiare da una guida internet non è il massimo!
C'è più di una cosa che non sono riuscito a capire se si può fare o meno;
per spiegarmi meglio porterò come esempio un programma scritto su due piedi:
#include <stdio.h>
int main () {
int a;
printf ("Scrivi un numero compreso tra 1 e 10: ");
scanf("%d",&a);
if ((a>0) && (a<10))
printf ("bravo");
else{
printf("Idiota scrivi un numero compreso tra 1 e 10: ");
scanf("%d",&a);
if ((a>0) && (a<10))
printf ("bravo");
else
printf("Suicidati ");
}
}
ok ,funziona! ma se al posto della terza possibilità "suicidati", vorrei che ogni volta che il numero messo a imput da tastiera non soddisfa la condizione: if ((a>0) && (a<10)) si ripetesse sempre il ciclo :
else{
printf("Idiota scrivi un numero compreso tra 1 e 10: ");
scanf("%d",&a);
anche per un numero infinito di volte, come dovrei fare?
L'altra cosa che non ho capito è la seguente:
#include <stdio.h>
int main () {
int a[] = {2,4,6,7,8,9};
int b;
printf ("Scrivi un numero compreso tra 1 e 10: ");
scanf("%d",&b);
if (b==a){
printf ("a e b sono uguali");
}else
printf("a e b sono diversi");
}
perchè non funziona?
Conosceto qualche sito con esercizi in c che non implichino la conoscenza "ENIGMI E PARADOSSI MATEMATICI" per essere risolti?
No scherzo,cmq qualche esercizio un pò più facile ,basilare...
masteryuri
17-12-2009, 23:35
Un consiglio... usa l'indentazione (http://it.wikipedia.org/wiki/Indentazione) per migliorarne la leggibilità del codice.
Poi, per il primo codice non hai che da usare un ciclo iterativo a tua scelta. Io azzarderei un while con una variabile k di controllo.
#include <stdio.h>
int main()
{
int a;
printf ("Scrivi un numero compreso tra 1 e 10: ");
int k;
while (k)
{
scanf("%d",&a);
if (a<0 || a>10)
printf("Idiota, inserisci un numero compreso tra 1 e 10: ");
else
printf("Bravo!");
break;
}
return 0;
}
Il secondo ora lo leggo
masteryuri
17-12-2009, 23:42
Ecco, non è chiaro quello che vuoi fare con il secondo codice.
La variabile a è un puntatore che contiene l'indirizzo del vettore.
Infatti gcc risponde così quando si cerca di compilare:
file.c:8: warning: comparison between pointer and integer
Se ti spieghi meglio ti dico come fare...
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "ciao"; /* maniera veloce e comoda per dichiarare una stringa*/
char str2[10];
while (strcmp(str1,str2)) /* Compara le due stringhe */
{
system("clear"); /* clear per UNIX, cls per microsoft */
printf("Salutami! ");
scanf ("%s",str2);
}
return 0;
}
Sarebbe meglio un do - while perché fare una strcmp su un stringa non terminata potrebbe portare a risultati non prevedibili. In questo caso non ci sono problemi perché il buffer allocato è più grande di "ciao", ma se fosse più piccolo potresti ad esempio avere un successo quando in realtà non ci sarebbe.
masteryuri
17-12-2009, 23:54
Puoi mostrarmi?
rikkaidd
17-12-2009, 23:59
Un consiglio... usa l'indentazione (http://it.wikipedia.org/wiki/Indentazione) per migliorarne la leggibilità del codice.
Poi, per il primo codice non hai che da usare un ciclo iterativo a tua scelta. Io azzarderei un while con una variabile k di controllo.
#include <stdio.h>
int main()
{
int a;
printf ("Scrivi un numero compreso tra 1 e 10: ");
int k;
while (k)
{
scanf("%d",&a);
if (a<0 || a>10)
printf("Idiota, inserisci un numero compreso tra 1 e 10: ");
else
printf("Bravo!");
break;
}
return 0;
}
Il secondo ora lo leggo
per l'identazione che ti devo dire...
sono una appassionato di modding game e riesco a leggere meglio il codice quando è più compatto possibile,e a maggior ragione quando uno spazio in più è uguale ad un errore
Ok ,questo dice bravo però se metti un numero che non soddisfa if il programma va male.
masteryuri
18-12-2009, 00:01
Beh qual è il problema, ora una struttura logica c'è. Puoi inserire anche queste finezze.
Puoi mostrarmi?
In realtà, pensandoci bene, potrebbe essere un problema anche in questo caso.
Mostrartelo è difficile perché dipende da quello che c'è prima nelle locazioni di memoria riservate per il secondo vettore.
Ad esempio:
char str1[] = "ciao"; /* maniera veloce e comoda per dichiarare una stringa*/
char str2[10];
while (strcmp(str1,str2)) /* Compara le due stringhe */
{
/*qui c'è qualcosa*/
}
Mettiamo che in str2 ci sia casualmente "ciao" (ricordo che non tutti i compilatori, azzerano o settano ad un valore preciso la memoria allocata staticamente, quello che c'è dipende da quello che c'era stato scritto prima), in quel caso si esce subito dal while senza mai eseguire quello che c'è all'interno.
rikkaidd
18-12-2009, 00:20
Avevo chiesto aiuto anche in un altroforum dove Style { HdS619 } mi ha risposto cosi:
Rikkaidd ha scritto:
ok ,funziona! ma se al posto della terza possibilità "suicidati", vorrei che ogni volta che il numero messo a imput da tastiera non soddisfa la condizione:Codice:
\* if ((a>0) && (a<10))*/
si ripetesse sempre il ciclo :
Codice:
else{
printf("Idiota scrivi un numero compreso tra 1 e 10: ");
scanf("%d",&a);
anche per un numero infinito di volte, come dovrei fare?
risposta:
#include <stdio.h>
int main (void)
{
int j;
do {
printf ("Inserisci un numero tra 1 e 10: ");
scanf ("%d", &j);
} while ( j < 1 || j > 10 );
printf ("Bravo.\n");
return 0;
}
Rikkaidd ha scritto:
L'altra cosa che non ho capito è la seguente:
Codice:
#include <stdio.h>
int main () {
int a[] = {2,4,6,7,8,9};
int b;
printf ("Scrivi un numero compreso tra 1 e 10: ");
scanf("%d",&b);
if (b==a){
printf ("a e b sono uguali");
}else
printf("a e b sono diversi");
}
perchè non funziona?
Conoscetre qualche sito con esercizi in c che non implichino la conoscenza di "ENIGMI E PARADOSSI MATEMATICI" per essere risolti?
risposta:
non puoi confrontare un int con un int * ( int array[] equivale a int * ) quindi dovresti fare un ciclo che confronta ogni elemento di a con b
LA COSA STRANA E' CHE HO CAPITO!!!!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.