Προς το περιεχόμενο

Πρόβλημα με πρόγραμμα στην C


TheOneGandalf

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα παίδες. Έχω φτιάξει ενα πρόγραμμα αλλά δεν μπορώ να το μετταγλωτίσω. Και δεν μπορώ να βρω το λάθος. Αν μπορούσατε να με βοηθήσετε θα σας είμουν ευγνώμων. Χρησιμοποιώ VS 2010. Επίσης το παράξενο ποιο είναι? Το ότι, όταν πάω να φτιάξω ενα νέο πρόγραμμα,

ακόμα και το πιο απλό, δηλαδη να εκτυπώνει κάτι στην οθόνη, ενώ το μεταγλωττίζει κανονικά δεν μου το τρέχει.. Ανοίγει απλά το cmd και εμφανιζει "Πιέστε ενα πλήκτρο για συνέχεια.."

Και όλα αυτά άρχισαν να συμβαίνουν αφού έφτιαξα το πρόγραμμα που σας παραθέτω παρακάτω. Τώρα πια δεν μπορώ να τρέξω τιποτααααα! Κατι παίζει με αυτο το IDE <_<

 

 

>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 7

int userGuess( void );
enum Status { CONTINUE, WON };

int main ( void ) 
{
enum Status gameStatus;
gameStatus = CONTINUE;
int hits;
int grid [ SIZE ] = { 0 };
srand( time( NULL ) );
int randomCell = rand() % 5;
grid [ randomCell ] = -1;
grid [ randomCell + 1 ] = -1;
grid [ randomCell + 1 ] = -1;


while ( gameStatus == CONTINUE ) 
{
	int guess = userGuess();

	if ( guess == -1 )
	{
		printf("OH YEAH! IT's a hit!\n");
		hits++;
	}
	else
	{
		printf("DAMN!  GUESS AGAIN\n");
	}

	if ( hits == 3 )
	{
		gameStatus = WON;
	}
}

system("pause");
return 0;
}

int userGuess()
{
printf("Type your guess dude\n");
int guess;
scanf("%d\n", &guess);
return guess;
}

 

 

Υ.Γ1 - Δεν μπορώ άλλο με αυτόν το IDE, μου έχει βγάλει την πίστη. Αν έχετε κανέναν καλύτερο να προτείνετε..

 

Υ.Γ2 - Compile Errors : http://imageshack.us/photo/my-images/263/errorgko.jpg/ :blink:

Δημοσ.

Σε μένα τρέχει μια χαρά (άσχετα αν μπαίνει σε infinite loop όταν του δίνω unexpected input), αλλά εγώ δεν χρησιμοποιώ VS :)

 

ΥΓ. Κατέβασε Code::Blocks (το αρχείο που περιέχει και τον mingw μέσα)... στα κάνει αυτόματα όλα install! Ή αν ενδιαφέρεσαι μόνο για C, τότε Pelles-C. Btw, ψυλλιάζομαι πως το VS το έχεις σεταρισμένο για C++ και για αυτό σου τσινάει με τον C κώδικα.

Δημοσ.

>
/* int grid [ SIZE ] = { 0 }; //den prepei na vazeis "keno" stis akules gia pinaka */
int grid[size] = { 0 }; //auto einai to sosto

>
//to idio kai edo... den prepei na vazeis "keno" stis akules gia pinaka
grid[randomCell] = -1;
grid[randomCell + 1] = -1;
grid[randomCell + 1] = -1;

>if ( guess == -1 )
{
   printf("OH YEAH! IT's a hit!\n");
   hits++; //to hits den to eheis arhikopoihsei...
}

Οσο για το IDE προτεινω (κι εγω) PELLES C και οταν εξοικειωθεις, μεταπηδας παλι στο VS ^_^

(γιατι κακα τα ψεματα, ειναι ΤΟ ΑΠΟΛΥΤΟ IDE για Windows...)

Δημοσ.

Σε VS08 το πρόγραμμα παίζει (εικάζω ότι στο VS10 είναι θέμα options), το αν τρέχει σωστά είναι άλλο θέμα, πχ:

>
int hits; // δείχνει μια τυχαία τιμή (δεν το θες αυτό!)
άρα..
int hits = 0; //  αρχικοποίησε το σε μηδέν (ή κάτι άλλο που σε εξυπηρετεί).

και άλλα..

Δημοσ.

Αυτό προφανώς είναι ιδιοτροπία του VS. Τα κενά στις αγκύλες δεν αποτελούν πρόβλημα για την γλώσσα αυτήν κάθε αυτήν.

 

>
/* int grid [ SIZE ] = { 0 }; //den prepei na vazeis "keno" stis akules gia pinaka */
int grid[size] = { 0 }; //auto einai to sosto

>
//to idio kai edo... den prepei na vazeis "keno" stis akules gia pinaka
grid[randomCell] = -1;
grid[randomCell + 1] = -1;
grid[randomCell + 1] = -1;

>if ( guess == -1 )
{
   printf("OH YEAH! IT's a hit!\n");
   hits++; //to hits den to eheis arhikopoihsei...
}

Οσο για το IDE προτεινω (κι εγω) PELLES C και οταν εξοικειωθεις, μεταπηδας παλι στο VS ^_^

(γιατι κακα τα ψεματα, ειναι ΤΟ ΑΠΟΛΥΤΟ IDE για Windows...)

Δημοσ.

Σας ευχαριστώ όλους παίδες. Και για τις συμβουλές σας & για την βοηθειά σας. Κατέβασα το Pelles C και βρήκα την υγειά μου! :-D

Όσο για το κενό στις αγκύλες το πήρα απο το βιβλίο ( C, How to program by deitel ). Μου άρεσε και

είπα να το χρησιμοποιώ και 'γώ! :P

 

Κάτι τελευταίο, οταν γράφω : ( int hits; ) δεν αρχικοποιείται αυτόματα η μεταβλητή και παίρνει την τιμή 0? :unsure:

Έτσι νόμιζα μέχρι στιγμής..

Δημοσ.

Στη C οιι δηλοσεις μεταβλητων γινονται στο πανω μερος της συναρτησης

με το παρακατω δεν θα εχει errors ουτε warnings

>#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define SIZE 7

int userGuess( void );
enum Status { CONTINUE, WON };

int main ( void ) 
{
       enum Status gameStatus;
       int hits;
       int grid [ SIZE ];
       int randomCell;
	gameStatus = CONTINUE;
	randomCell = rand() % 5;
	memset(grid,0,sizeof(grid));
	hits = 0;
       grid [ randomCell ] = -1;
       grid [ randomCell + 1 ] = -1;
       grid [ randomCell + 1 ] = -1;
	srand( (size_t) time( NULL ) );
	
       while ( gameStatus == CONTINUE ) 
       {
               int guess = userGuess();

               if ( guess == -1 )
               {
                       printf("OH YEAH! IT's a hit!\n");
                       hits++;
               }
               else
               {
                       printf("DAMN!  GUESS AGAIN\n");
               }

               if ( hits == 3 )
               {
                       gameStatus = WON;
               }
       }

       system("pause");
       return 0;
}

int userGuess()
{  
int guess;
       printf("Type your guess dude\n");
    
       scanf("%d\n", &guess);
       return guess;
}

 

Δημοσ.

Σας ευχαριστώ όλους παίδες. Και για τις συμβουλές σας & για την βοηθειά σας. Κατέβασα το Pelles C και βρήκα την υγειά μου! :-D

Όσο για το κενό στις αγκύλες το πήρα απο το βιβλίο ( C, How to program by deitel ). Μου άρεσε και

είπα να το χρησιμοποιώ και 'γώ! :P

Και πολύ καλά έκανες, δεν υπάρχει κανένα πρόβλημα με τα κενά (προφανώς είναι ιδιοτροπία του VS το να μη τα δέχεται).

 

Κάτι τελευταίο, οταν γράφω : ( int hits; ) δεν αρχικοποιείται αυτόματα η μεταβλητή και παίρνει την τιμή 0? :unsure:

Έτσι νόμιζα μέχρι στιγμής..

Αρχικοποιείται αυτόματα μόνο αν είναι καθολική μεταβλητή (έξω δηλαδή από κάθε συνάρτηση). Όταν είναι τοπική μεταβλητή (μέσα δηλαδή σε συνάρτηση) δεν αρχικοποιείται αυτόματα. Για αυτό είναι πάντα καλό να αρχικοποιείς μόνος σου τις τοπικές μεταβλητές όταν τις ορίζεις.

 

Π.χ.

int hits = 0;

 

btw, δεν χρειάζονται παρενθέσεις.

 

Στη C οιι δηλοσεις μεταβλητων γινονται στο πανω μερος της συναρτησης

Αυτό έχει αλλάξει. Από την C99 αναθεώρηση και μετά (ίσως κι από την ANSI, δεν το θυμάμαι τώρα απέξω) μπορείς να ορίζεις μεταβλητές σε όποια γραμμή θέλεις.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...