PDA

View Full Version : تابع atoi تو برنامه ام کار نمیکنه



Blue Rose
پنج شنبه 15 مرداد 1388, 23:08 عصر
سلام

تو c++ تازه کارم و اون بالا بالا ها سير ميکنم!!!

هنوز هيچي نشده رفتم سراغ محيط گرافيکي و win32 و اين چيزا...

حالا يه سوال واسم پيش اومده :
چرا تابع atoi موجود در سرفايل math.h تو برنامه win32 کار نميکنه
(البته تو کنسول که کار کرد)

این هم سورسی که کار میکردم :

http://arashi2.persiangig.com/Error.rar

Nima_NF
جمعه 16 مرداد 1388, 01:23 صبح
شما باید هدر فایل ها را یا در فایل stdafx.h تعریف کنید یا کلا اول خود stdafx.h را include کنید و سپس سایر موارد را لیست کنید:



#include "stdafx.h"

//#include <iostream>
//#include <conio.h>
#include <math.h>


در win32 به دو هدر فایل دوم و سوم هم احتیاجی ندارید.

علاوه بر آن برنامه شما چندین خطای دیگر هم دارد؛ مثلا بخش پیام به این شکل تغییر کند، یعنی اول باید با GetMessage پیام را بگیرید بعد پردازش کنید:



MSG msg;
//while (msg.message != WM_QUIT)

while( GetMessage( &msg, NULL, 0, 0 ) != 0)


و در مورد تعریف رشته، باید طول آن را مشخص کنید، یا اشاره گر تعریف کنید و سپس با new حافظه تخصیص دهید، در حالی که شما یک رشته NULL ساخته اید:



// char chrCount[]="";
// char charTexts[]="";

char chrCount[30]="";
char charTexts[30]="";

و سایر موارد...

Blue Rose
جمعه 16 مرداد 1388, 14:16 عصر
سلام

اقا دستت درد نکنه
تو اين مدت ديده بودم که زبان c++ هيچي نميفهمه ديگه نميدونستم تا اين حد!!!

مشکلي که داشتم حل شد وا قعا ممنون
اون دو تا هدر رو همينطوري گذاشتم تو برنامه ام نيازي بهشون ندارم
در مورد GetMessage هم من اينطوري ياد گرفتم اما تو اکثر سورسهايي که تا حالا ديدم اينطوري بوده که شما گفتيد اما نميدونم چرا و کدوم بهتره
سعي ميکنم اين رو هم درست کنم

در مورد رشته هم متوجه نشدم ايرادي که گرفتيد قضيه اش چيه
من فکر ميکنم اينطوريه : هر بار که اين رشته مقداردهي ميشه طول رشته همونجا به اندازه مورد نياز تعيين ميشه

-------------------------
راستي ثابتهاي مورد نياز (مثل ثابتهاي زير) و اطلاعات مربوطه رو رو از کجا ميتونم پيدا کنم
WS_VISIBLE
WS_CHILD
WS_BORDER
يا خيلي چيزا ديگه که مثلا ديدم تو منو ها هم استفاده ميشه

Nima_NF
جمعه 16 مرداد 1388, 15:50 عصر
مواردی که بیان کردید نشان دهنده آن هست که هنوز با مباحث اولیه خود زبان ++C مشکلات بسیاری دارید و مربوط به win32 نمی شوند.
توصیه می کنم قبل از کار با مباحث پیشرفته win32 ابتدا بر روی خود زبان ++C تحت کنسول تسلط پیدا کنید، در غیر این صورت با مشکلات بسیاری روبرو خواهید شد.


تو اين مدت ديده بودم که زبان c++ هيچي نميفهمه ديگه نميدونستم تا اين حد!!!زبان C++ و کامپایلر آن در نظر دارد که وقتی از stdafx استفاده می کنید پس می دانید که هدف از precompiled headers چه هست، اگر نمی دانید این وظیفه شماست که آن را فرا بگیرید نه خود زبان.
برای اطلاعات بیشتر در مورد همین موضوع این لینک را مطالعه کنید (FAQ 19) (http://barnamenevis.org/forum/showthread.php?t=152913)

ضمنا به یاد داشته باشید که include هدر فایل ها همانند این هست که در همانجا محتویاتش کپی شود.


در مورد GetMessage هم من اينطوري ياد گرفتم اما تو اکثر سورسهايي که تا حالا ديدم اينطوري بوده که شما گفتيد اما نميدونم چرا و کدوم بهتره سعي ميکنم اين رو هم درست کنمشما در برنامه خود متغیر msg را تعریف کردید اما مقدار دهی نکردید، پس از لحاط برنامه نویسی متغیر شما هیچ مقداری ندارد که بخواهید آن را چیز دیگری مقایسه کنید. پس از GetMessage استفاده می کنیم تا آن را با پیام کنونی پر کنیم.


در مورد رشته هم متوجه نشدم ايرادي که گرفتيد قضيه اش چيهباز هم بر می گردد به زبان ++C.
وقتی شما داخل پرانتز عددی قرار نمی دهید، کامپایلر به اندازه و طول رشته ای که مقابل آن تعریف می کنید حافظه تخصیص می دهد، که چون شما نوشتید "" خالی، پس یعنی رشته NULL با طول صفر به علاوه علامت NULL \0.

به همین خاطر هست که شما در پارامتر سوم تابع GetWindowText طول رشته را وارد می کنید تا بیشتر از طول معرفی شده رشته شما نباشد.


راستي ثابتهاي مورد نياز (مثل ثابتهاي زير) و اطلاعات مربوطه رو رو از کجا ميتونم پيدا کنمهمه چیز در MSDN وجود دارد، از طریق بخش هر تابع به توضیحات آن ها می رسید، یا مستقیم آن ها را در MSDN جستجو کنید.

Blue Rose
شنبه 17 مرداد 1388, 23:13 عصر
دست شما درد نکنه

ایشالله باز مزاحم میشم یه گیر دیگه افتاده تو برنامه ام تا یه خورده باش ور برم ! فعلا خدا نگهدار