الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

محاولاتي(principe de mot de passe)

بدأه yacinebrca في 10 مايو 2014 · 2 رد · 758 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم


 


هذه محاولة في استخدام مبدأ ادخال كلمة السر ...


 


. استخدمت الدالة getch()...


  البرنامج به امكانية الحذف والتعديل استعنت بي system("cls").(امكانية حذف الشاشة...)


 


أرجوا منا الاخوة أن لا يبخلوا علينا  بملاحظاتهم فالكود أكيد لايخلوا من الأخطاء


 


تقبلوا مروري.. ;) ..


 


الكـــــــــــــــــــــــــــود .( العفو الكود وضعت فيه تعليقات بلغة الفرنسية . :blush: ..)


 


..............................................................................


#include<stdio.h>

#include<string.h>

#include<stdlib.h>


#define M 50 


int main()

{

  char x[M];  // Le nombre maximum de caractères saisis [ Mot de passe.]

  int i=-1,k=0,j;


  puts("\nentre le mot passe :");


  for(i = 0 ; x[i-1]!= 13 ; i++ ){                                   

                                  x= getch();  

                                   // L'utilisateur entre un caractere .


                                  if( x == 13)break; 

                                  //Si l'utilisateur appuie sur (entre code ASCI 13) ...Quitter le programme .


                                  if( x== 8 )

                                                 // code ASCI :8--> supprime.                                            

                                              {                                         

                                               if( i == 0) continue;

                                               system("cls"); // Effacer l'écran .


                                               i = i - 2 ;

                                               k--;             

                                               puts("\nentre le mot passe :"); 

                                               for(j = 0; j < k ; j++)                                          

                                                               printf("*"); 

                                                               //Re-print . (k-1)fois '*'. à nouveau .                                                                 

                                               continue;                       

                                              }                                                    

                                  printf("*");

                                  k++ ; //Un compteur pour compter le nombre [de caractere ] est entre .                                             

                               }

  x = 0; // code ASCI 0 --> '\0'.


  printf(" \n   le code : %s  \n ",x);

  // Afficher (.. mot de passe ...);


  system("PAUSE");	

  return 0;

}



                                             //..................................................................

                                             //**********J'espère que j'ai été en mesure de régler***************//

                                             //..................................................................//

1

elearning_image.jpg

#2

أحسنت أخي ياسين , منتجاتك تزداد يوماً بعد يوم ثابر :)

إليك بعض الملاحظات :

0- خطأ كبير : x[i-1]!= 13 عندما i=0 هذا يعني الوصول الى الindex بقيمة -1

1- تضمين المكتبة conio.h  التي تحوي الدالة getch

2-استعمل const بدلاً من define كما يلي
 

const int M=50;//#define M 50

3-كيف يكون شرط التوقف هو
 

x[i-1]!= 13

والحلقة تحوي
 

if( x == 13)break;

لا داعي للشرط أصلاً :)

4- فكرة محي الحرف أعجبتني :)

5- طالما أنك تستخدم getch ما رأيك باستخدام putch بدلاً من printf  :)

6-استعمل if-else بدلاً من وضع continue

[بالمناسبة : يقولون أنه لا يفضل استخدام continue و break و goto بداخل الحلقات , لأن هذا يجعل للحلقة عدة نقاط خروج وهذا غير محبذ ]

أخيراً هذه نسختي من البرنامج أرجو أن يعجبك
 

#include<stdio.h>#include<conio.h>int main(){  char x[50],i;  puts("\nentre le mot passe :");  for(i=0;!i||x[i-1];i++)  {      x= getch();      if(x!=13){            if(x!=8){                putch('*');            }else{                putch('\b');putch(' ');putch('\b');                i--;x[i--]=0;            }      }else{          x=0;      }  }  printf(" \n   le code : %s  \n ",x);  return 0;}

والله ولي التوفيق

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 22 مايو 2014 في 20:17

#3

بارك الله فيك  على هذه الملاحظات ...

 

اقتباس

 

for(i = 0 ; x[i-1]!= 13 ; i++ ){
x= getch();
// L'utilisateur entre un caractere .

if( x == 13)break;
لا داعي للشرط أصلاً :)

 

الشرط هنا مهم  ..

. لانه لو ضغط المستخدم على زر entre لقام البرنامج بطباعة '*' لأن شرط الخروج يقع في الحلقة التكرارية ...يبقي متأخرا..

...من اجل هذا وضع الشرط لاختبار القيمة الذي أدخلها المستخدم مباشرة ............

 

لو جربت حذف ذلك الشرط وضغظت على entre  في البداية لطبع البرنامج '*' .... وهذا شيئ خاطئ..

 

 

اقتباس

 

6-استعمل if-else بدلاً من وضع continue

 أظن ان continie تفي بالغرض  في ذلك الموضع..

 

 

أعجبني الحل الذي وضعته... لكن كثيرا ما أراك  تعقد علي فهم أجزاء منه.

 

بنسبة ل

اقتباس

 

for(i=0;!i||x[i-1];i++)

ألا يكفي  حذف

 

!i

تضبح هكذا

for(i=0;x[i-1];i++)

 

 

لأن الشرط الأول سيكون دائما يساوي 0 فهي تعتمد على الشطر الثاني اي عندما x[i-1]='\0'.

........................................

 

شكرا جزيلا على ملاحظاتك اتمنى ان لا تبخل علينا بمرورك .....

 

بارك الله فيك .

تم تعديل هذه المشاركة بواسطة yacinebrca في 23 مايو 2014 في 14:53

elearning_image.jpg

مواضيع مشابهة