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

إسناد قيمتين داخل Parameter واحد

مغلق
بدأه mody5 في 14 يوليو 2007 · 14 رد · 1,238 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم..

إتباعا لقوانين المنتدى نشرت كل سؤال على حدى...

سؤالي هوى:

هذا الكود بالفيجوال بيسك:

Dim s as string="Number: "
Dim i as integer=1

label1.text="You Are " & s & i

كيف يمكنني فعل هذا بال VC++(جمع أكثر من متغير وثابت داخل باراميتير وم أنواع متشابهه ومختلفة)

Message.jpg
#2

int i = 1;

char str[100];

sprintf( str , "you are %s %d" , "Number:" , i );

m_edit.setText( str );

( _ /)

(='.'=)

(")-(")

#3

كنت سأرد عليك لكن عندما ضغطت على إضافة رد وجدت مشكلة في الدي إس إل عند الرجل الذي أنا مشترك معه فيه

لكن هذا هو الرد

خذ هذا الكود

#include <stdio.h>
#include <conio.h>
int main()
{
	char x[10] = "this";
	int s = 32;
	char y[10] = "is a";
	char MyChar[20];
	sprintf(MyChar,"%s%c%s test",x,s,y);
	printf("%s",MyChar);
	getch();
	return 0;
}
#4
sprintf(MyChar,"%s%d%s test",x,s,y);
#5

شكراً لكم كلك إخواني على مساعداتكم لكني لكني في الأول أنا مبرمج VC++ وليس C فالمكتبة الوحيدة المتضمنة في البرنامج هى windows.h كنت أسأل كيف يتم ذلك كما يتم في الVB و هل يمكن عمل مثل الكود الذي كتبتوه لكن بإستعمال windows.h

Message.jpg
#6

جرب هذا

طبعاً في برنامجك لا تكتب getch و printf

#include <stdio.h>
#include <conio.h>
int string_length(char ch[20]);
int main()
{
	char x[10] = "this is";
	int i;
	int t = 0;
	char y[10] = " a test";
	char MyChar[20];
	for (i = 0; i <= string_length(x); i++)
	{
		MyChar = x;	
	}
	t = string_length(MyChar);
	for (i = 0; i <= string_length(y); i++)
	{
		MyChar[i + t] = y;
	}
	printf("%s",MyChar);
	getch();
	return 0;
}
int string_length(char ch[20])
{
	int r = 0;
	for (int i = 0; i < 20; i++)
	{
		if (!ch)
		{
		   r = i;
		   break;
		}  
	}
	return r;
}
#7
mody5 كتب:
لكني في الأول أنا مبرمج VC++ وليس C فالمكتبة الوحيدة المتضمنة في البرنامج هى windows.h

احب ان اوضح لك شي مهم وهو مكتبة CTR تضمن تلقائيا ضمن ملفات الويندوز اي انك ستجد في مجلد النظام (c:\windows\system) ملف DLL لهذه المكتبة يسمي vscrt.dll اي انها احدي اجزاء الويندوز

يمكنك تجاوز ذلك واستخدام wsprintf فقط التي هي ضمن اجراءات windows.h وهي مشابة الي حد كبير sprintf

int i = 1;
char str[100];

wsprintf( str, "you are %s %d" , "Number:" , i );
m_lbl.SetText( str );

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

تم تعديل هذه المشاركة بواسطة garo في 15 يوليو 2007 في 17:48

( _ /)

(='.'=)

(")-(")

#8

السلام عليكم,

مثال للقيام بالعملية المطلوبة بإستخدام كائن الـ string من مكتبة الـ STL التابعة للـ ++C:

#include <iostream>
#include <string>
#include <sstream>
#include <conio.h>

void main()
{
	// stringstream is an object that is used for string conversions.
	std::stringstream ss;
	// out_str is the output string
	std::string out_str;

	std::string str1("Number ");
	std::string str2;
	int n = 1;

	// convert n from int to string
	ss << n;
	ss >> str2;

	// compose the output string
	out_str = "You are ";
	out_str += str1;
	out_str += str2;

	// print the string
	std::cout<<out_str.c_str();

	getch();
}

كما ترى فالعملية ليست أسهل, ولكن لغة ++C رغم بعض التعقيدات تمتلك ميزة مهمة جداً, وهي المرونة.

ماذا لو كتبنا دالة لتقوم بالعملية المطلوبة؟

#include <iostream>
#include <string>
#include <sstream>
#include <conio.h>

void JoinStringToInt( std::string &out_str, std::string _string, int _number )
{
	std::stringstream ss;
	std::string str;
	out_str += _string;
	ss << _number;
	ss >> str;
	out_str += str;
}

void main()
{
	// stringstream is an object that is used for string conversions.
	std::stringstream ss;
	// out_str is the output string
	std::string out_str;

	JoinStringToInt( out_str, "You are Number ", 1 );
	std::cout<<out_str.c_str()<<std::endl;

	getch();
}

أو تستطيع أن تستخدم هذه الطريقة:

	std::string out_str = "You are ";
	JoinStringToInt( out_str, "Number ", 1 );
	std::cout<<out_str.c_str()<<std::endl;

لاحظ إنه رغم بساطة الدالة, فقد حلت المشكلة تماماً! وهذا ما أقصده بالمرونه.

:)

تم تعديل هذه المشاركة بواسطة SandHawk في 16 يوليو 2007 في 02:35

#9

مشكورين أخواني على وقفتكم

اقتباس
ولكن لغة ++C رغم بعض التعقيدات تمتلك ميزة مهمة جداً, وهي المرونة.

هذا الذي جعلها الرقم واحد عالميا

لكن ألا يوجد نفس الكود في مكتبة windows.h ؟؟

Message.jpg
#10

مكتبة windows.h هي المكتبة المختصة بالـ Windows API, هي ليست حتى جزءاً من ++C, ولكن جميع الطرق التي قدمها المشاركون هي جزء من الـ ++C وهي موجودة في فجوال ستوديو مثلما موجودة في gcc تحت اللينوكس (الحقيقة ان هذه المكتبات هي جزء من C++ standards منذ إنشاء لغة ++C) فما سبب قولك إنك تريد إستخدام windows.h فقط؟ في هذه الحالة انت كمن يقول إنه يريد أن يكتب برامج ++C بدون إستخدام ++C!

لذلك فإجابة سريعة لسؤالك: لا يوجد.

تم تعديل هذه المشاركة بواسطة SandHawk في 16 يوليو 2007 في 18:50

#11

اخي كنت أقصد إن كان هنالك دوال تتم المطلوب ، هل يمكنك ان تخبرني كيف يمكنك بعد جمع المتغيرين كيف يتم وضعمها في الباريميتر WindowName التابع للداالة CreateWindowA و ما فائدة الدالة LoadString وهل يمكنها فعل المطلوب؟

Message.jpg
#12

مشكور أخي garo لقد ساعدني إجابتك الأخيرة.. لكن

لماذا لاتظهر كلمة Times في هذا السطر

wsprintf( str, "%s %d" , "You Clicked Me " , j ," Times");
Message.jpg
#13
wsprintf( str, "%s %d %s" , "You Clicked Me " , j ," Times");

تم تعديل هذه المشاركة بواسطة SandHawk في 17 يوليو 2007 في 19:23

#14
 

The LoadString function loads a string resource from the executable file associated with a specified module, copies the string into a buffer, and appends a terminating null character. 

int LoadString(

	HINSTANCE hInstance, // handle of module containing string resource 
	UINT uID, // resource identifier 
	LPTSTR lpBuffer, // address of buffer for resource 
	int nBufferMax  // size of buffer 
   ); 


Parameters

hInstance

Identifies an instance of the module whose executable file contains the string resource. 

uID

Specifies the integer identifier of the string to be loaded. 

lpBuffer

Points to the buffer to receive the string. 

nBufferMax

Specifies the size of the buffer in bytes (ANSI version) or characters (Unicode version). The string is truncated and null terminated if it is longer than the number of characters specified. 



Return Values

If the function succeeds, the return value is the number of bytes (ANSI version) or characters (Unicode version) copied into the buffer, not including the null-terminating character, or zero if the string resource does not exist. To get extended error information, call GetLastError.

LoadString تقوم كما ترى بتحميل نص من Resource من نوع String Table. أي ليس لها علاقة بعمليات النصوص.

أما كيف تستخدم النص في دالة CreateWindow كعنوان تستطيع إما تمرير الـ buffer التي إستخدمتها مباشرة أما إذا كنت تستخدم std::string تستطيع أن تمرر المؤشر الذي من نوع char* هكذا:


printf( "The char* of the string: %s", str.c_str() );
std::string str = "Some string";

c_str تعني بالضبط "C String" لأن الـ char* يعتبر من مزايا لغة C

:)

تم تعديل هذه المشاركة بواسطة SandHawk في 17 يوليو 2007 في 19:42

#15

زجيل شكري على ردودكم المفيدة وتقبلو تحيات أخوكم

Message.jpg

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

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