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

c πρόγραμμα


anyp4kouo_ydor

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

Δημοσ.

γεια σας παιδιά,

στο παρακάτω πρόγραμμα δεν εκτελείται η if αλλά η else. Δουλεύει με αριθμό μέσα στον πίνακα, δουλεύει με δείκτη στη συμβολοσειρά, αλλά δε δουλεύει με πίνακα και συμβολοσειρά. Η μεταγλώττιση μου το βγάζει σωστό, αυτό είναι που λένε λογικό λάθος;

 

>#include "stdio.h"

int main()
{
char leit[5];
printf("dose tin leksi");
scanf("%s",leit);/*ena*/


if (leit=="ena")
{
	printf("egrapses: %s\n",leit);
	printf("sosto\n");
}
else{
	printf("oxi\n");
	printf("lathos\n");
}
return 0;
}

Δημοσ.

Ετσι οπως το γραφεις, συγκρινεις τις δυο θεσεις μνημης κι οχι το περιεχομενο τους, για να δεις θεση μνημης μιας μεταβλητης κανεις

>printf("%p", metavlitiHpinakasHdeiktis);

Για συμβολοσειρες εχουμε την strcmp οπως ειπε κι ο φιλος Technology fan, αν ομως δεν ηταν συμβολοσειρες και ηταν πχ πινακες ακεραιων μπορουσες να κανεις κατι τετοιο

>if ( (*leit) == (*"ena") ) // λαθος υστερα απο παρατηριση του neverlastn

το οποιο δουλευει και με συμβολσειρες, αλλα δεν ειναι ουτε "κομψο", ουτε ασφαλες. (επειδη οι συμβολοσειρες εχουν πολλα κρυφα πχ \0 ή \n)

Δημοσ.
>#include "stdio.h"
#include <string.h> /* για την διαχείρηση συμβολοσειρών */

int main()
{
char leit[5];
printf("dose tin leksi");
scanf("%s",leit);/*ena*/


if (!strncmp(leit,"ena",3)) /* ή strcmp(leit,"ena") == 0 , για περισσότερα: (σε Unix Terminal: man strcmp)*/
{
	printf("egrapses: %s\n",leit);
	printf("sosto\n");
}
else{
	printf("oxi\n");
	printf("lathos\n");
}
return 0;
}

Δημοσ.

>if ( (*leit) == (*"ena") )

το οποιο δουλευει και με συμβολσειρες, αλλα δεν ειναι ουτε "κομψο", ουτε ασφαλες. (επειδη οι συμβολοσειρες εχουν πολλα κρυφα πχ \0 ή \n)

 

Αυτό είναι λάθος απ'όσο μπορώ να πω. Ελέγχει μόνο τον πρώτο χαρακτήρα ('e').

 

strncmp είναι πράγματι η πιό σωστή λύση. Το γιατί μπορείς να το βρεις σε όποιο security book π.χ. αυτό (ΠΑΡΑ πολύ καλό):

http://www.amazon.com/gp/product/0321335724/ref=pd_lpo_k2_dp_sr_2?pf_rd_p=1278548962&pf_rd_s=lpo-top-stripe-1&pf_rd_t=201&pf_rd_i=0321563212&pf_rd_m=ATVPDKIKX0DER&pf_rd_r=1WBBK5V1D4RNCA5TW5D2

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

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

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