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

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

Δημοσ.

Δηλαδή αν δεν ισχύει η συνθήκη(έχουμε οποιαδήποτε μη-μηδενική τιμή ως αποτέλεσμα)τότε εμφανίζει τον αριθμό;

 

Υ.Γ.Το 0 στη C δεν σημαίνει false;

 

If ( κάτι ) -> true σημαίνει ότι κάτι != 0;

 

Δοκίμασε να τρέξεις

 

>
if(0) puts("with 0");
if(1) puts("with 1");
if(5) puts("with 5");
if(-5) puts("with -5");

 

άρα

 

if ( ! κάτι ) -> true σημαίνει ότι κατι == 0

 

Γενικά μέσα στο if μπορείς να βάλεις οποιωνδήποτε βασικό τύπο της C.

Και η if θα λειτουργήσει με την ίδια λογική.

θα "αποδώσει" false αν όλο το περιεχόμενο του (κάθε φορά) τύπου είναι 0;

  • Απαντ. 1,6k
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοσ.

Θελω να δεσμευσω μνημη για ενα πινακα δυο διαστασεων και κανω τα εξης...Θελω να μου ειπε αν ειναι 100% σωστο...Ευχαριστω για αλλη μια φορα...

 

>
int lines=5,cos=10;
int i, **arr;
arr = (int **) malloc(lines * sizeof(int*));
if (arr==NULL)
{
 printf("Memory fail");
exit(EXIT_FAILURE);
}
for(i=0 ; i<cols ; i++)
{
arr[i]=(int *)malloc(cols * sizeof(int));
if (arr[i]==NULL)
{
 printf("Memory fail");
exit(EXIT_FAILURE);
}
}

Δημοσ.

Θελω να δεσμευσω μνημη για ενα πινακα δυο διαστασεων και κανω τα εξης...Θελω να μου ειπε αν ειναι 100% σωστο...Ευχαριστω για αλλη μια φορα...

 

>
int lines=5,cos=10;
int i, **arr;
arr = (int **) malloc(lines * sizeof(int*));
if (arr==NULL)
{
printf("Memory fail");
exit(EXIT_FAILURE);
}
for(i=0 ; i<cols ; i++)
{
arr[i]=(int *)malloc(cols * sizeof(int));
if (arr[i]==NULL)
{
printf("Memory fail");
exit(EXIT_FAILURE);
}
}

 

Το ...

 

>
for(i=0 ; i<cols ; i++)

 

πρέπει ...

 

>
for(i=0 ; i<lines ; i++)

 

και μέσα στο σώμα του ...

 

>
if (arr[i]==NULL)

 

πρέπει να απελευθερώσεις με free() όλα τα arr[0] έως και arr[i-1]

Δημοσ.

>
char s[8]="tralala"
j=0;
while (s[j]){
printf("%c-",s[j]);
j++
}

 

Τι θα τυπωσει αυτο;

 

.Με μπερδευει το "-"...

Θα τυπωσει το tralala αναποδα;

Δημοσ.

Νομίζω πως το καλύτερο που έχεις να κάνεις σε πρώτη φάση είναι να το τρέξεις.

 

Έπειτα, άσε έξω ότι σε μπερδεύει και πιάσε το λογικά.

 

Έχεις ένα j που αυξάνεται. Έχεις μια printf που δείχνει να εκτυπώνει "%c" και για αυτό εμείς δίνουμε το s[j] (όπου το j είπαμε αυξάνεται).

 

Ποιο είναι το συμπέρασμα σε σχέση τουλάχιστον με το γενικό αν τυπώνεται ανάποδα το string;

Δημοσ.

>
#include<stdio.h>

int main(void)
{
char s[8]="tralala";

int j=0;
while (s[j]){
printf("%c-",s[j]);
j++;
}

return 0;
}

 

Ετσι οπως το έδωσες δεν θα τυπωνε τιποτα γιατι ειχε συντακτικα λάθη :P

To - μετα το %c δεν χρησιμεύει κάπου εκτος και αν θέλεις μετα απο καθε χαρακτήρα

να εκτυπώνεται και το '-' . Το tralala δεν θα τυπωθει ανάποδα. Για ποιο λογο να τυπωθεί ανάποδα.

Ο βροχος ξεκινάει για s[0] και θα συνεχίζει οσο το s[j] δεν δίνει ψευδές. Στην περίπτωση σου δινει

για j=7 επειδη συναντά τον μηδενικό χαρακτήρα για το τέλος του string.

 

Εσυ τι θες να τυπώνεται ανάποδα ?

 

>
#include<stdio.h>

int main(void)
{


char s[6]="hello";
int j=0;

while (s[j]){
printf("%c",s[j]);
j++;
}

printf("\n");

while(j>=0){
printf("%c", s[j]);
j--;
}

return 0;
}

Δημοσ.

γιατί απλά δεν κάνεις αυτό;

 

>for(i=0; i<MAX; i+= COUNTBY)
printf("%d ",i);

 

 

Το ξέρω ότι μπορεί να γίνει με πολύ πιο εύκολο τρόπο αλλα το βιβλίο που έχω(οδηγός της c-herbert schildt)προτείνει αυτό ως λύση.Προσωπικά πιστεύω ότι εφόσον δεν θα ισχύσει το i%COUNTBY θα εμφανίσει τον αριθμό διότι εκμεταλεύεται το γεγονός ότι η τιμή που επιστρέφει σε περίπτωση false(δηλαδή το 0),είναι και το αποτέλεσμα που θέλουμε να πάρουμε απο το i%COUNTBY.

 

Υ.Γ.Δεν νομίζω να έγινα και τόσο κατανοητός ε;

Δημοσ.

Tο ξέρω αυτό,απλά η απορία μου είναι ότι στη συνθήκη λέει if(!i%COUNTBY)το οποίο δίνει false(δηλαδή 0).Γι'αυτό έγραψα όλη αυτή την αρλούμπα στο προηγούμενο post.Το ερώτημα μου είναι αν ισχύει η αρλούμπα που έγραψα.

Δημοσ.

Έχω τον εξής κώδικα:

 

 

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

#define MAX 100
#define COUNTBY 3

int main(void)
{
int i;

for(i=0;i<MAX;i++)
if(!(i%COUNTBY))printf("%d ",i);

system("Pause");

return 0;
}

 

 

ο οποίος μετρά απο 0 μέχρι MAX με βήμα COUNTBY.Το ερώτημα μου είναι το εξής:το if δουλεύει κατα κάποιο τρόπο σαν το strcmp;Δηλαδή αν δεν ισχύει η συνθήκη(έχουμε οποιαδήποτε μη-μηδενική τιμή ως αποτέλεσμα)τότε εμφανίζει τον αριθμό;

 

Υ.Γ.Το 0 στη C δεν σημαίνει false;

 

Ελπίζω να έγινα κατανοητός.

 

Yeap, το 0 στην C ισοδυναμεί με false και οτιδήποτε ΜΗ μηδέν ισοδυναμεί με true (π.χ. 1, 45, -987, κλπ).

 

Οπότε η συνθήκη του if στον κώδικα θα μπει στο σώμα της όταν το υπόλοιπο της διαίρεσης: i / COUNTBY (δηλαδή το αποτέλεσμα του: i % COUNTBY) ισούται με 0.

 

Διότι όταν γίνει 0 το αποτέλεσμα, έχουμε: if ( !0 ) που σημαίνει: if ( !false ), δηλαδή: if ( true ).

 

Προσπάθησε να αποφεύγεις αυτή την σύνταξη, προτίμησε την...

 

>
if (0 == i % COUNTBY)

 

που είναι απείρως πιο κατανοητό ακόμα και με 1 ανάγνωση.

 

ΥΓ. Επίσης, αν θέλεις να διευκολύνεις όλους όσους διαβάζουμε το φόρουμ, καθώς και όλους όσους ενδέχεται να διαβάσουν κώδικές σου, σταμάτα να γράφεις τα μονόγραμμα if-else σε μια μόνο γραμμή, η οποία δεν έχει και κανένα κενό.

 

>
if (0 == i % COUNTBY)
   printf("%d ",i);

Δημοσ.

>
if (0 == i % COUNTBY)

 

[offtopic]

Το ξέρω ότι είμαι παράξενος :P αλλά μόνο εμένα μου φαίνεται πολύ άσχημη και δυσανάγνωστη η "ανάποδη" γραφή στα if ?

[/offtopic]

Δημοσ.

[offtopic]

Το ξέρω ότι είμαι παράξενος :P αλλά μόνο εμένα μου φαίνεται πολύ άσχημη και δυσανάγνωστη η "ανάποδη" γραφή στα if ?

[/offtopic]

 

Τσου, είναι και πολύς κόσμος ακόμα.

 

Υπάρχει η γνωστή (από ποικίλα άλλα θέματα) διαμάχη όσων είναι υπερ και όσων είναι κατά.

 

Εγώ προφανώς είμαι στους "υπέρ", περισσότερο σαν double-safety measure...

 

C: http://c2.com/cgi/wi...antsFromTheLeft

C++: http://www.moserware...r-but-this.html

Java: http://www.mkyong.co...-in-comparison/

Δημοσ.

Και εγώ έχω συνηθίσει να γράφω από την "αριστερή" μεριά την μεταβλητή-αντικείμενο όμως όντως αυτά που διάβασα στα link που παραθέτεις migf1 είναι πολύ σωστά και με βάλανε σε σκέψη.

 

Ειδικά στην περίπτωση των null object γλιτώνεις κώδικα! (γιατί δε το είχα σκεφτεί από μόνος μου; :-D )

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

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