| imho.ws |
![]() |
|
|
|
# 21 |
|
Junior Member
Регистрация: 13.11.2002
Адрес: Russia
Сообщения: 132
![]() |
А как тебе вот такая реализация, единственный минус - распознает только десятичные числа.
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char** argv) { char buf[32], *check; long num; printf("Enter x: "); fgets(buf, sizeof(buf), stdin); num = strtol(buf, &check, 10); if (strncmp(buf, check, sizeof(buf)) != 0) printf("You entered: %ld\n", num); return 0; } Последний раз редактировалось TiamaT; 01.09.2003 в 19:49. |
|
|
|
|
# 27 |
|
::VIP::
Регистрация: 17.12.2002
Адрес: Q-ata, Israel
Сообщения: 310
![]() ![]() ![]() ![]() ![]() |
Дробное - то есть с точкой ?
Вариант : разрешим юзеру ОДИН раз ввести точку. вместо int x будет float x , соответственно scanf(... %f ) а не %d , добавляем флажок int flag_point = 1 и ещё один ELSE IF: Код:
...
else if ( i!=0 && flag_point==1 && buffer[i-1]!='-' )
{
flag_point = 0;
buffer[i] = ch;
putch(ch);
i++;
}
else ...
|
|
|
|
|
# 28 |
|
Junior Member
Регистрация: 13.11.2002
Адрес: Russia
Сообщения: 132
![]() |
Tulip
если нужно вводить дробные, то используй strtod(buf, &check) вместо strtol. если хочешь вводить шестнадцатиричные (типа 0x234h) то используй strtol(buf, &check, 16). Ну и в printfе надо будет поменять конечно. |
|
|
|
|
# 29 |
|
Junior Member
Регистрация: 17.08.2003
Пол: Male
Сообщения: 80
![]() |
Есть одна проблема. Ниже я написал часть кода. Суть его в том, что нужно ввести два раза числа. (в первом случае 1,2,3 или 4. Во-втором 1 или 2). Проблема в том, что после ввода в первый раз, нельзя ввести во второй раз. То есть программа как бы перепрыгивает через второй scanf (не дает ввести значение) и завершается. Как можно это исправить?
![]() #include <stdio.h> main() { char i; printf("Enter number 1,2,3 or 4: "); do { scanf("%c",&i); } while(i!='1' && i!='2' && i!='3' && i!='4'); i=10; do { printf("Enter number 1 or 2: "); scanf("%c",&i); } while(i!='1' && i!='2' && i!=10); } |
|
|
|
|
# 31 |
|
::VIP::
Регистрация: 17.12.2002
Адрес: Q-ata, Israel
Сообщения: 310
![]() ![]() ![]() ![]() ![]() |
Код:
#include <stdio.h>
main()
{
int i1,i2;
printf("Enter number 1,2,3 or 4: ");
do
{
scanf("%d",&i1);
}
while(i1<1 || i1>4);
printf("Enter number 1 or 2: ");
do
{
scanf("%d",&i2);
}
while(i2<1 || i2>2);
// ...
}
|
|
|
|
|
# 33 | |
|
Junior Member
Регистрация: 17.08.2003
Пол: Male
Сообщения: 80
![]() |
Цитата:
|
|
|
|
|
|
# 34 |
|
::VIP::
Регистрация: 17.12.2002
Адрес: Q-ata, Israel
Сообщения: 310
![]() ![]() ![]() ![]() ![]() |
Проблемма в твоём случае была в "букве" ENTER - нажатие на неё генерирует не один символ а два - 13 и 10.
13 закрывает первый скан, а 10 попадает во второй. Примитивное решение - команда getch() сразу после scanf(%c) Или вместо scanf("%c",&i) используй i=getche() |
|
|