View Full Version : مشکل در کامپایل
Special
یک شنبه 11 آذر 1386, 19:36 عصر
سلام
می خوام یک آرایه ی 2بعدی که همه ارقام آن صفر باشه رو در خروجی ببینم.
اینو نوشتم ولی موقع کامپایل 1 warning و 2تا error میده. مشکل کجاست؟
#include<iostream>
int main()
{
int a[3][3];
int i,j;
for (i=0; i<3; i++)
for (j=0; j<3; j++)
cout<<a[i][j]==0;
getch();
return 0;
}
Nima_NF
یک شنبه 11 آذر 1386, 22:23 عصر
#include<iostream>
#include<conio.h>
using namespace std;
int main()
{
int a[3][3];
int i,j;
for (i=0; i<3; i++)
for (j=0; j<3; j++)
{
a[i][j]=0;
cout<< a[i][j] ;
}
_getch();
return 0;
}
دستور getch بدون _ از VC 2005 به بعد حذف شده و باید از دستور فوق استفاده کنید ، ضمنا شما برای cout دو تا == گذاشتید که یکی باید باشد و کلا این شیوه در cout درست نیست و باید جدا بنویسید.
farhadamin
یک شنبه 11 آذر 1386, 22:37 عصر
من سی کار کردم اما این جوری که تو نوشتی ایراد داره مخصوصا قسمت پرینتت.. من برای سی می نویسم خودت عوضش کن برای سی پلاس...
#include <stdio.h>
#include <conio.h>
int main()
{
int a[3][3];
int i,j;
for (i=0; i<3; i++)
{
for (j=0; j<3; j++)
{
printf("%d %d\n",a[i]==0,a[j]==0);
}
getch();
}
return 0;
}
البته مثل این که من و نیما هم زمان جواب دادیم که جواب نیما حتما کامل تره....
Alireza Orumand
دوشنبه 12 آذر 1386, 09:57 صبح
سلام
دستور getch بدون _ از VC 2005 به بعد حذف شده و باید از دستور فوق استفاده کنید
تابع getch() از توابع استاندارد c هست که تو سرفایل conio.h قرار داره و مشکلی که با getch بوجود آمده مربوط به الصاق نکردن این سرفایل هست و ربطی به محیط نداره. ایشون اصلا اسمی از vc 2005 نیاوردن. تو هر محیطی حتی اگر vc2005 باشه اگر سرفایل conio.h استفاده کنن هیچ مشکلی در استفاده از getch() نخواهد بود.
ضمنا شما برای cout دو تا == گذاشتید که یکی باید باشد و کلا این شیوه در cout درست نیست و باید جدا بنویسید.
اشکال دوم که مربوط به cout هست. این تابع در فضای نام std قرار داره که special از این موضوع غفلت کرده که باعث بوجود آمدن خطا شده و خطا ارتباطی به استفاده از == نداره. استفاده از == فقط خطای منطقی به وجود میاره و نه خطای زمان کامپایل که اگر به جای == از = استفاده کنن این خطا هم برطرف میشه و هیچ اجباری در جدا نوشتن این خطوط نیست و کامل و درست کار میکنه.
برنامه به شکل زیر اصلاح شد که تو کامپایلر های مختلف هم کار میکنه.
#include<iostream>
#include"conio.h"
int main()
{
int a[3][3];
int i,j;
for (i=0; i<3; i++)
for (j=0; j<3; j++)
std::cout<<(a[i][j]=0);
getch();
return 0;
}
به عنوان پیشنهاد خدمت شما عرض میکنم در مواردی که تمام اعضای آرایه قراره با یک عدد پر بشه میتونید اون عدد رو در هنگام تعریف آرایه به اون اختصاص بدید که در این صورت تعریف آرایه شما به شکل زیر میشه
int a[3][3]={0,0};
موفق باشید.
Nima_NF
دوشنبه 12 آذر 1386, 17:45 عصر
سلام
تابع getch() از توابع استاندارد c هست که تو سرفایل conio.h قرار داره و مشکلی که با getch بوجود آمده مربوط به الصاق نکردن این سرفایل هست و ربطی به محیط نداره. ایشون اصلا اسمی از vc 2005 نیاوردن. تو هر محیطی حتی اگر vc2005 باشه اگر سرفایل conio.h استفاده کنن هیچ مشکلی در استفاده از getch() نخواهد بود.
قبل از نقض هر چیزی ابتدا به مرجع آن مراجعه کنید و از صحت مطلب آگاه شوید (به MSDN و یا داخل همان هدر فایل conio.h):
This POSIX function is deprecated beginning in Visual C++ 2005. Use the ISO C++ conformant _getch instead.
See online help for details
در حال حاضر شما موقتا می توانید از این تابع در VC استفاده کنید ولی در آینده احتمال حذف این نام وجود دارد.
اشکال دوم که مربوط به cout هست. این تابع در فضای نام std قرار داره که special از این موضوع غفلت کرده که باعث بوجود آمدن خطا شده و خطا ارتباطی به استفاده از == نداره. بنده هم مشکل std را با نوشتن using namespace std حل کردم و آن bold شده نوشتم .
موفق باشید
Alireza Orumand
دوشنبه 12 آذر 1386, 19:02 عصر
در حال حاضر شما موقتا می توانید از این تابع در VC استفاده کنید ولی در آینده احتمال حذف این نام وجود دارد.
نکته اول اینکه هنوز که حذف نشده چون من این کد رو تو vc2005 نوشتم.
گل پسر ناراحت نشو ولی ایشون اصلا حرفی از کامپایلر نزدن و این خیلی اشتباه بزرگی که چون شما فقط با vc++2005 کار کردید و از امکانات دیگر کامپایلر ها و محیط ها هیچ اطلاعی ندارید .تمام امکانات زبانی مثل سی++ رو در حد همین کامپایلری که تسلط خوبی هم روش ندارید پردازش کنید. شما اول تفاوت بین زبان استاندار سی و سی++ و امکاناتی که محیط های توسعه و کامپایلر های مختلف به شما میده درک کنید. بعد روی یکی از کامپایلر ها که دوست دارید تسلط پیدا کنید بعد بیاید درباره علمی صحبت کردن درک مطالب با هم مناظره میکنیم.
بنده هم مشکل std را با نوشتن using namespace std حل کردم و آن bold شده نوشتم .
شما در مطلب خودتون گفته بودید که استفاده از= در cout درست نیست. که این هم نشون دهنده ی صحت و سقم و توانایی شما در پردازش دقیق و علمی همه مسائل میشه و جواب این مورد هم تو همین پست چند خط بالا تر داده شده.
موفق باشید.
Special
سه شنبه 13 آذر 1386, 01:14 صبح
باتشکر از همه دوستان
فقط یه مشکل دیگه وجود داره اونم اینه که نمایش خروجی داده ها همش توی یک سطر پشت سر همه.
اینجوری ==> 000000000
اما من میخوام اینجوری باشه ==>
0 0 0
0 0 0
0 0 0
ممنون
emad_67
سه شنبه 13 آذر 1386, 15:02 عصر
باتشکر از همه دوستان
فقط یه مشکل دیگه وجود داره اونم اینه که نمایش خروجی داده ها همش توی یک سطر پشت سر همه.
اینجوری ==> 000000000
اما من میخوام اینجوری باشه ==>
0 0 0
0 0 0
0 0 0
ممنون
کدت رو به این شکل تغییر بده
#include<iostream>
#include<conio.h>
using namespace std;
void main()
{
int a[3][3];
int i,j;
for (i=0; i<3; i++)
for (j=0; j<3; j++)
{
a[i][j]=0;
cout<< a[i][j] ;
if(j==2)
cout<<endl;
}
getch();
}
Alireza Orumand
سه شنبه 13 آذر 1386, 17:50 عصر
راه حل پیشنهادی آقا عماد درسته ولی اگر دستور endl رو بیرون از حلقه داخلی قرار بدید دیگه نیازی به استفاده از if ندارید که خوب برنامه کمی اصولی تر میشه ولی در مجموع تفاوت چندانی نداره.
for (i=0; i<3; i++)
{
for (j=0; j<3; j++)
{
a[i][j]=0;
cout<< a[i][j] ;
}
cout<<endl;
}
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.