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

صياغة الشرط في الأمر scanf

مغلق
بدأه SB4 في 8 مايو 2006 · 11 رد · 1,342 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

شلونكم أخواني إن شاء الله بخير

أول برنامج يأخذ جملة من المستخدم ويقوم بطباعتها ولكن عندما يكون في أول الجملة نجمه * فسوف يتوقف البرنامج وهذا الكود أللي وصلتله :

#include<stdio.h>

void main()
{
     int counter;
     char string[50];
     
     for(counter=1;counter<100;counter++)
     {
       printf("Enter your string:");
       gets(string);
       printf("%s\n",string);
     }
     
     while(1);
}

والبرنامج الثاني عملة هو يطلب من المستخدم رقم معين ويقوم بطباعة مثلث مثلا إذا وضع رقم 1 يطبع مثلث واحد وإذا وضع رقم 8 يطبع ثمانية مثلثات ولكن إذا وضع الرقم 9 سوف يتوقف البرنامج المشكلة هنا أن المثلثات تطبع تحت بعض وليس بجانب بعضها البعض فما هو الحل وهذا الكود للبرنامج :

#include<stdio.h>

void main()
{
     int loops_num,counter,counter2;
     
     printf("How many loops?");
     scanf("%d",&loops_num);
     
     for(counter=1;loops_num<9;counter++)
     {
       for(counter2=1;counter2<=loops_num;counter2++)
       {
         printf(" *\n***\n *\n");
       }
       printf("How many loops?");
       scanf("%d",&loops_num);
     }
     
     while(1);
     
}

أريد نتيجة طباعة المثلث كما هي بالمرفقات

وشكرا لكم مقدما

traingle.txt

تم تعديل هذه المشاركة بواسطة SB4 في 8 مايو 2006 في 16:12

#2

بالنسبة للسؤال الثانى

بورلاند كانت بتقدم دول مفيدة للطباعة فى احداثيات معينة

لا اعرف لها بدائل على ميكروسوفت

واضح من البرنامج ان اسلوبه بسيط فبنفس الاسلوب قد يفيدك هذا

#include<stdio.h>

void main()
{
    int loops_num,counter2;
   
    printf("How many loops?");
	scanf("%d",&loops_num);

	while (loops_num<9){
  for(counter2=1;counter2<=loops_num;counter2++){
 	 printf(" *  ");
  }
  printf("\n");
  for(counter2=1;counter2<=loops_num;counter2++){
 	 printf("*** ");
  }
  printf("\n");
  for(counter2=1;counter2<=loops_num;counter2++){
 	 printf(" *  ");
  }
  printf("\n");
  printf("How many loops?");
  scanf("%d",&loops_num);	
	}   
}
#3

شكرا أخوي PointerVC وجزاك الله خير

يعني ألحين الفكرة أن كل سطر يقوم بـ loop مخصصة له ويكون أمر الإنتقال لسطر جديد بعد الـ loop مباشر ممتاز فهمت الفكرة عدل

عدل كلامك أنا توني مبتدئ والأسلوب أللي أستخدمة بسيط :) حتى البرنامج أللي أستخدمة بسيط جدا Dev-C++ :)

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

وجاري تحليل البرنامج الأول لعل وعسا ألقاء حل ...

#4

خلاص شكرا لجميع الأخوه الكرام وبالأخص الأخ الكريم PointerVC

وهذا حل البرنامج الأول للفائدة :

#include<stdio.h>

void main()
{
    int counter;
    char string[50],x;
    x='*';
    
    for(counter=1;string[0]!=x;counter++)
    {
      printf("Enter your string:");
      gets(string);
      printf("%s\n",string);
    }
    
    while(1);
}
#5

لكن لماذا؛( while(1 ؟؟؟

هذا سيوقف البرنامج ولا داعي له!!

#6

أهلا أخوي إسماعيل ابراهيم

نعم صحيح while(1) سوف يوقف البرنامج وأنا متعمد أوقف البرنامج لأنني أقوم بعمل برامج تعمل من خلال شاشة الدوس فإذا سويت Run من البرنامج أللي أستخدمة للبرمجة سوف تظهر نافذة الدوس ثم تختفي وأنا أبي الشاشة تكون ثابتة فأوقف الشاشة بأن أجعل التكرار أنفنت ليس له حدود :)

#7

تمام لكن عليك استخدام getch أو ما شابه لأنه في برنامجك لا أحد يمكنه وقف البرنامج - إلا اضراري بتدخل نظام التشغيل.

#8

بما أني مبتدئ تعتبر هذي طريقة مناسبة لكن عندي سؤال مو getch هي نفسها getchar ولا تختلف ؟ وإذا نفسها فأللي أعرفة أن هذا الأمر يأخذ أول حرف من الجملة ويقوم بطباعتة صحيح أم لا ؟ وهل لها وظائف أخرى لا أعرفها ؟

وشاكرلك أهتمامك أخي الحبيب

#9

استخدم ()getch كما قال اسماعيل بدل ()while

اعتقد انك بحاجة الى تضمين هذا الفايل هيدر

#include <conio.h>
#10

ممتاز نفس النتيجة شكرا للأخوين اسماعيل ابراهيم و Yousof

بس ممكن سؤال شنو وظيفة هذا الأمر بالتحديد ؟

وبارك الله فيكم

#11

getch

تنتظر من المستخدم أن يضغط احد ال character عن طريق ال console (الشاشه السوداء)

أما conio.h

فهو اختصار ل console input output و الداله getch معرفه به

#12

شكرا أخوي Yousof

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

هذا الموضوع مغلق.

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