PDA

View Full Version : مشخص کردن انتهای آرایه



mhn1991
شنبه 10 خرداد 1393, 17:02 عصر
سلام
من می خوام تو for آخر فقط عدد ذخیره شده را نشون بدم چون همه آرایه رو با صفر پر کردم بعد از عدد کلی صفر میزاره چه شرط باید بزارم تا انتهای آرایه معلوم شه


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main ()
{
char tmp[100];int path[40];int i,h;int j =0;
memset(tmp,0,sizeof(tmp));
memset(path,0,sizeof(path));
scanf("%s",tmp);
for(h=0;h<100;h++)
{
if(tmp[h]>47 && tmp[h]<58)
{
m=tmp[h]-48;
path[j]=m;
j++;
}
}
for(i=0;i<40;i++)
printf("%d",path[i]);
return 0;
}

motherboard
یک شنبه 11 خرداد 1393, 10:22 صبح
سلام.اول اینکه کدتون خطا میده چون که m رو تعریف نکردید.دوم اینکه اونجور که من متوجه شدم می خواهید صفر ها دیگه نمایش داده نشه به خاطر همین من شرط زیر رو گذاشتم تا مقدار درون اندیس های ارایه path رو به شرط نابرابر بودن با صفر نمایش بده

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <conio.h>
int main ()
{
char tmp[100];int path[40];int i,h;int j =0,m;
memset(tmp,0,sizeof(tmp));
memset(path,0,sizeof(path));
scanf("%s",tmp);
for(h=0;h<100;h++)
{
if(tmp[h]>47 && tmp[h]<58)
{
m=tmp[h]-48;
path[j]=m;
j++;
}
}
for(i=0;i<40;i++)
if(path[i]!=0)
printf("%d",path[i]);
getch();
return 0;
}

mhn1991
دوشنبه 12 خرداد 1393, 09:33 صبح
سلام این کد اصلی نبود برا همین من یادم رفت متفییر m رو اضافه کنم من خودم راه حل مشکل رو فهمیدم و راه شما یک مشکل داره اون هم اینکه اگر عدد ما مثلا 10300 بود اون موقع فقط ۱ اول نمایش داده می شه و بقیه اعداد نمایش داده نمی شن راه حلی که من استفاده کردم قرار دادن شمارنده j بجای عدد 40 در for آخر بود چون j داره طول آرایه رو مشخص می کنه

motherboard
دوشنبه 12 خرداد 1393, 09:58 صبح
سلام این کد اصلی نبود برا همین من یادم رفت متفییر m رو اضافه کنم من خودم راه حل مشکل رو فهمیدم و راه شما یک مشکل داره اون هم اینکه اگر عدد ما مثلا 10300 بود اون موقع فقط ۱ اول نمایش داده می شه و بقیه اعداد نمایش داده نمی شن راه حلی که من استفاده کردم قرار دادن شمارنده j بجای عدد 40 در for آخر بود چون j داره طول آرایه رو مشخص می کنه

من که این جور فکر نمی کنم.من همون کدی رو که گذاشتم با نتیجه کامپایلش و با همون عددی که ذکر کردید رو گذاشتم و برعکس گفته هاتون فقط عدد 1 رو نشون نمیده!!!!!!!!!!!
119797

mhn1991
دوشنبه 12 خرداد 1393, 12:49 عصر
ببین ورودی من مثلا رشته زیر هست mhn10300 حالا من اومدم 10300 رو توی یک آرایه ریختم تا ازش استفاده کنم پس من برام مهم 10300 هست حالا وقتی این عدد تو آرایه میره تا بقیه اعضای آرایه صفر هستند حلا برای اینکه تو فراخوانی بعدی این 10300 رو ببینیم از روشی که تو پست قبلی گفتم باید بریم تو روش شما صفر ها همه حذف می شوند نه صفر های اضافه به خروجی برنامه خودتون و من توجه کنید

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <conio.h>
int main ()
{
char tmp[100];int path[40];int i,h;int j =0,m;
memset(tmp,0,sizeof(tmp));
memset(path,0,sizeof(path));
scanf("%s",tmp);
for(h=0;h<100;h++)
{
if(tmp[h]>47 && tmp[h]<58)
{
m=tmp[h]-48;
path[j]=m;
j++;
}
}
for(i=0;i<j;i++)
printf("%d",path[i]);
return 0;
}

nimvb123456
دوشنبه 12 خرداد 1393, 18:31 عصر
سلام
شما راه های مختلفی دارین تا این کار رو انجام بدین. ساده ترین راه اینه که در متغیر path انتهای کارتون رو نشانه گذاری کنید. منظور از نشانه گذاری چیه؟ همون مثال خودتون رو در نظر بگیرید:

PATH : 10300 0 0 0 0 0
صفرهایی که به صورت Bold هستن خوب اضافی هستن دیگه! شما برای اینکه این ها رو چاپ نکنی و از اون جایی که در آرایه Path فقط از کاراکترهای اسکی مربوط به نمایش حروف استفاده می کنید، می تونید از یکی از کاراکترهای اسکی مربوط به نمایش حروف الفبای انگلیسی به عنوان نشان دهنده خاتمه رشته استفاده کنید یعنی:

PATH : 10300 f 0 0 0 0
برای فهمیدن مکان گذاشتن کاراکتر f هم می تونید از مقدار نهایی j بعد از خروج از حلقه استفاده کنید. حالا داخل حلقه مربوط به چاپ چک می کنید که کاراکتر بررسی شده دارای مقدار f هست یا نه که اگه بود کار تمومه.
امیدوارم موفق باشید.:چشمک:

motherboard
دوشنبه 12 خرداد 1393, 18:52 عصر
دوست عزیز دوربین مخفیه!!!!!!!!!!!!!
شما یک سوالی کردی و من براساس اونچه که متوجه شدم یک کدی رو براتون گذاشتم.بعدش شما از کد من ایراد گرفتید و بخشی از نقل قول زیر عینا متعلق به شماست:


راه شما یک مشکل داره اون هم اینکه اگر عدد ما مثلا 10300 بود اون موقع فقط ۱ اول نمایش داده می شه و بقیه اعداد نمایش داده نمی شن

شما به من در نقل قولتون میگید که ایراد کد من اینه که مثلا وقتی عدد 10300 رو زدیم اون موقع فقط عدد 1 نمایش داده میشه!!!!!.:متعجب:در حالی که من با عکس به شما نشون دادم که این طوری نیست و اعداد غیر صفر همه شون نمایش داده میشه. بعد از این ها دوباره شما می ایید یک چیزهای عجیب غریب رو به اسم ایراد میگید.مثلا در نقل قول زیر شما بعد از دیدن کد داری میگی:

ببین ورودی من مثلا رشته زیر هست mhn10300 حالا من اومدم 10300 رو توی یک آرایه ریختم تا ازش استفاده کنم پس من برام مهم 10300 هست حالا وقتی این عدد تو آرایه میره تا بقیه اعضای آرایه صفر هستند حلا برای اینکه تو فراخوانی بعدی این 10300 رو ببینیم از روشی که تو پست قبلی گفتم باید بریم تو روش شما صفر ها همه حذف می شوند نه صفر های اضافه به خروجی برنامه خودتون و من توجه کنید
الان کد شما رو در زیر گذاشتم تا دوستان هم ببینند.وقتی من مال شما رو هم کامپایل می کنم تمام صفرها میره!!!!یا وقتی ترکیبی از حروف و اعداد رو میزنم فقط اعداد غیر صفر نمایش داده میشه.شبیه این اتفاقات در کد من هم انجام میشه.
این کد شماست:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <conio.h>
int main ()
{
char tmp[100];int path[40];int i,h;int j =0,m;
memset(tmp,0,sizeof(tmp));
memset(path,0,sizeof(path));
scanf("%s",tmp);
for(h=0;h<100;h++)
{
if(tmp[h]>47 && tmp[h]<58)
{
m=tmp[h]-48;
path[j]=m;
j++;
}
}
for(i=0;i<j;i++)
printf("%d",path[i]);
return 0;
}




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


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <conio.h>
int main ()
{
char tmp[100];int path[40];int i,h;int j =0,m;
memset(tmp,0,sizeof(tmp));
memset(path,0,sizeof(path));
scanf("%s",tmp);
for(h=0;h<100;h++)
{
if(tmp[h]>47 && tmp[h]<58)
{
m=tmp[h]-48;
path[j]=m;
j++;
}
}
for(i=0;i<40;i++)
if(path[i]!=0)
printf("%d",path[i]);
getch();
return 0;
}




اصلا ایراداتون عجیب غریبه و مشخص نیست چی رو می گویید و چه چیز رو می خواهید!!! ایرادهایی که در نقل قول گفتید همشون جای ایراد داره!!!!!مثل این می مونه که در دفعه اول به من بگید برو طالبی بگیر و من هم مطابق فرمایشتون میرم طالبی میگیرم و وقتی طالبی رو خواستم به شما بدم شما ایراد بگیرید و بگید چرا خربزه نخریدی؟؟؟؟؟؟!!!!!!