درود بر دوستان گل من بیسیک بلد نیستم ولی تقربیا همشو فهمیدم به جز این دستور
چه معنی در زبان c میده؟Mid(inputstr , X , 1) = ""
درود بر دوستان گل من بیسیک بلد نیستم ولی تقربیا همشو فهمیدم به جز این دستور
چه معنی در زبان c میده؟Mid(inputstr , X , 1) = ""
اگر بخوای از وسط رشته کاراکتری یک حرف حذف کنی باید مثل برنامه مهندس بقیه کاراکتر ها رو یک خونه تو آرایه شیفت بدی.
ولی تو برنامه من کاراکتر ها از آخر رشته با backspace پاک میشن. این دستور دقیقا مثل دستور زیر توی C عمل می کنه :
کد:inputstr[x] = ''
چون تو بیسیک ما براحتی به درایه های یک رشته کاراکتری دسترسی نداریم باید از تابع mid واسه این کار استفاده کنیم.
من که دارم بیخیالش مشم!
نمی دونم چرا هر کاری باهاش میکنم نمی شه
برنامه رو میزارم یه نگاهش بندازید اساتید
دوست عزیز برنامه رو تا اونجایی که می تونستم به برنامه ای که شما لطف کردید گذاشتید نزدیک کردم لطفا شما هم یه نیگاه بنداز!کد:while (1) { if(n==0x1B){ i=0; lcd_clear(); n=0; } if(n==0x0D&&i==0){ lcd_gotoxy(0,1); x=1; i=1; n=0; } if(n==0x08){ x--; if(x<1) x=1; //lcd_read_byte(0x0F); //lcd_read_byte(0x0C); // _lcd_write_data(0x7); inputstr[x]=''; lcd_gotoxy(x,1); lcd_putsf(" "); lcd_gotoxy(x,1); n=0; } if(n!=0x1B&&n!=0x0D&&n!=0x08){ n=getchar(); delay_ms(5); sprintf(buffer,"%c",n); lcd_puts(buffer); x++; } }; }
ویرایش توسط Ma3ood : 09-03-2012 در ساعت 18:15
سلام دوست عزیز همیشه توی برنامه هایی که می نویسید tab گذاری صحیح رو رعایت کنید. وارد هر حلقه که میشید یک تب جلو بیاین و در پایان حلقه یک تب عقب برید. این جوری خوندن برنامتون خیلی راحت تر می شه.
منظور من از inputstr اسم متغیری بود که شما رشتتون رو توش ذخیره می کنید ولی گویا شما اصلاً رشته وارد شده رو جایی ذخیره نمی کنید. کاربرد متغیر i رو متوجه نشدم.
برنامتون موقع کامپایل خطا نمی ده؟
من یه تصحیحاتی کردم ولی بهتره کل برنامتون رو یکجا بگذارید (مخصوصاً بخش تعریف متغیر ها رو)
کد:while (1) { n=getchar(); if(n==0x1B){ i=0; lcd_clear(); n=0; x=0; } if(n==0x0D&&i==0){ lcd_gotoxy(0,1); x=0; i=1; n=0; } if(n==0x08){ x--; if(x<0) x=0; lcd_gotoxy(x,1); lcd_putsf(" "); lcd_gotoxy(x,1); n=0; } if(n!=0x1B&&n!=0x0D&&n!=0x08){ sprintf(buffer,"%c",n); lcd_puts(buffer); x++; } delay_ms(5); };
درود بر شما دوست عزیز شرمنده بایت ناخوانایی برنامه استادم هم همیشه میگفت اینا رو رعایت کنید ولی کو گوش شنوا
من کاربرد این inputstr رو درست متوجه نشدم و نتونستم ازش استفاده کنم!
برنامه خطایی نداره و همه چیش کارمیکنه به جز این مسئله ای که دارم!
متعییر i را برای این گذاشتم اگه در برنامه دوبار کلید اینتر رو بزنیم دفعه دوم بی اثر باشه!
برنامه رو کامل میزارم شما خواهشا تغییرات رو برای متغییر inputstr رو درش اعمال کن بلکه درست شد
یه سوال مهم زمانی که از دستور lcd_gotoxy استفاده میکنیم در قسمت سطر نمی تونیم که عدد ثابت 1 بزاریم چون این جوری همش میره سطر دوم و عملیات رو میخواد از اونجا ادامه بده و باید تشخیص بدیم که الان سطر اوله یا دوم
کد:#include <mega8.h> #include <stdlib.h> #include <delay.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x18 ;PORTB #endasm #include <lcd.h> #include <stdio.h> void main(void) { unsigned char n=0,i=0; char buffer[16],x=0; char inputstr[32]; PORTD=0x00; DDRD=0x00; PORTB=0x00; DDRB=0x00; PORTC=0x00; DDRC=0x00; UCSRA=0x00; UCSRB=0x10; UCSRC=0x86; UBRRH=0x00; UBRRL=0x0C; lcd_init(16); while (1) { if(n==0x1B){ i=0; lcd_clear(); n=0; } if(n==0x0D&&i==0){ lcd_gotoxy(0,1); i=1; n=0; } if(n==0x08){ x--; delay_ms(150); if(x<0) x=0; inputstr[x]=''; lcd_gotoxy(x,0); lcd_putchar(0xFE); lcd_gotoxy(x,0); n=0; } if(n!=0x1B&n!=0x0D&n!=0x08){ n=getchar(); inputstr[x]=n; sprintf(buffer,"%c",n); lcd_puts(buffer); x++; } }; }
ویرایش توسط Ma3ood : 09-03-2012 در ساعت 21:35
سلام مجدد دوستان ما را از نظرات خود بی بهره نگذارید همچنان نیاز مند پست های مفید شما هستیم!