PDA

View Full Version : مبتدی: چاپ کاراکتر تا زمانی که کاراکتر عددی نباشد (به زبان c)



download69
پنج شنبه 10 آذر 1390, 13:41 عصر
سلام دوستان
من در نوشتم برنامه ای به زبان c که از ورودی کاراکتر میگیرد و تا زمانی که کاراکتر ورودی عددی نیست اونو چاپ کنه به مشکل برخوردم
من به روش های زیر عمل کردم ولی به مشکل برخوردم

#include<stdio.h>
#include<conio.h>
#include<ctype.h>
main()
{
char ch;int asc;clrscr();
printf("Please Enter a character:\n");
ch=getchar();
asc=toascii(ch);
while (asc<48 && asc>57)
{
printf("%c\n",ch);
ch=getchar();
}
getchar();
}

و

#include<stdio.h>
#include<conio.h>
#include<ctype.h>
main()
{
char ch;int asc;clrscr();
printf("Please Enter a character:\n");
ch=getchar();
asc=toascii(ch);
while (asc<48 || asc>57)
{
printf("%c\n",ch);
ch=getchar();
}
getchar();
}
با شرط if هم انجام دادم که قدرت If بیشتر بود ولی بعد از بررسی شرط و انجام عملیات مربوط به شرط، برای گرفتن کارکتر بعد و بررسی آن به مشکل برخوردم یعنی اگر کاراکتر ورودی غیر عددی بود خوب اونو چاپ میکرد و حالا می بایست برود و کاراکتر بعدی را دریافت کند که دریافت میکه ولی چطور باید به دستور if که در سطرهای بالاتر است برگردد !!!!!!!!!

ممنون میشم کمکم کنید
ما مبتدی هستیم و تازه C یاد گرفتیم

quiet_programmer
پنج شنبه 10 آذر 1390, 14:01 عصر
با سلام.

while (asc<48 && asc>57)


1. یه عدد چه طور میشه هم کمتر از 48 و در عین حال بزرگتر از 57 هم باشه. (به شرط دقت کن! گفتی کمتر از 48 "و" بزرگتر از 57:متعجب:)

while (asc<48 && asc>57)
{
printf("%c\n",ch);
ch=getchar();
}


2. این حلقه بنا به توضیح بالا اصلا اجرا نمیشه ولی حتی اگه اجرا بشه هم باز اشتباست. شما کاراکتر رو میگیری میزاری تو ch و تو شرط داری متغییر asc رو مقایسه میکنی.

برنامه دومت درسته. ولی مشکل شماره 2 رو داره.
بهتره برای دریافت کاراکتر از getch یا getche استفاده کنی. این توابع بادریافت یک کاراکتر منتظر دریافت enter نمیمونن. getch کاراکتر رو بدون اینکه اکو کنه کاراکتر رو دریافت میکنه. یعنی کاراکتر دریافت شده از صفحه کلید رو نشون نمیده ولی getche کاراکتر رو همراه بادریافت نشون میده.

چون کد دومیت درست بوده و احساس میکنم تلاشت رو کردی برای درک کد، کد زیر رو برات میزارم.

#include<stdio.h>
#include<conio.h>
#include<ctype.h>
main()
{
char ch;int asc;clrscr();
printf("Please Enter a character:\n");
ch=getch();
while (!(ch>=48 && ch<=57))
{
printf("%c\n",ch);
ch=getch();
}
}

یاحق.
موفق باشید/

download69
پنج شنبه 10 آذر 1390, 15:40 عصر
سلام دمه شما گرم
من پیش خودم گفته بودم اگر بشد در بازه های عددی از مخالف استفاده بشه این کار رو میتونم انجام بدم ولی بلد نبودم چطور ازش استفاده کنم ولی شما به من یاد دادید
while (!(ch>=48 && ch<=57))
ممنون