ايران ويج

نسخه‌ی کامل: حلقه.كمك.
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
اين كد رو ببينيد:
char str[20];
int i;
for (i = 0; str[i];i++)
قسمتي رو كه قرمز كردم محل نوشتن شرط حلقست درست؟
ولي اين عبارت شرطي نيست(str[i]).و كد كار مي كنه.من نمي فهمم چجوري
اين هم كل كد:



#include <stdio.h>
#include <conio.h>
int main()
{
int n=0,n2[50],i;
char ch,str[50];
gets(str);
printf("type the char to search");
ch = getche();
for (i=0;str[i];i++){
if (str[i] == ch){
n2[i] = ch;
n = i;
printf("%d ",n+1);
}
}
printf("| | %d",n+1);
getch();
return 0;
}
چرا شرط نیست ؟؟؟ دقیقا برابر اینه :  '0\'=! [str[i
توی حلقه و در بخش شرط ، حاصل شرط باید همیشه True باشه و برابر با False نباشه . حالا توی زبان سی صفر چیه همون False هست دیگه . پس وجود صفر عددی = False بودن = وجود NULL .
ثانیا انتهای هر String توی C یک NULL هست . حالا NULL چیه ؟؟ همون صفره عددیه ( نه رشته ای یا ASCII که کدش 48 هست بلکه صفر در مبنای 10)
برای اینکه کامپایلر اینو بفهمه که کد اسکی NULL صفر هست (اولین عضو جدول اسکی رو نگاه کن ) و یک موقع کد اسکی عدد 0 ( که کد ASCII اش 48 هست و به عنوان قسمتی از رشته محسوب میشه ) رو جاش اشتباهی فرض نکنه  ، در محاسبات رشته ای یک \ قبلش میزارن تا صفر عددی با صفر ASCII از هم متمایز بشن .

حالا وقتی شما توی بخش شرط مینویسی [str[i یعنی چی ؟ یعنی اینکه تا زمانی که [str[i برابر True باشه یا [str[i برابر False نباشه . اینو میشه نوشت [str[i برابر Null نباشه . پس برای اینه که تا زمانی که [str[i شما NULL نشه شرط حلقه همیشه برقراه ( True هست ) و بکار خودش ادامه میده ! Smile
مرسي
گرفتم